http://poj.org/problem?id=2051
这个题目的大题意思就是给你一些ID,和ID所对应的周期,每隔它所对应的周期,它的任务就会执行,就会输出所对应的ID
Register 2004 200
Register 2005 300
时间为100时,不输出
时间为200时,输出2004
时间为300时,输出2005
时间为400时,输出2004
时间为500时,不输出
时间为600时,两个周期都满足,则按照ID又小到大的顺序进行输出
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct IN{ //定义一个结构体存放ID和时间 5 int id; 6 int time; 7 }s[20000]; 8 9 10 int cmp(const void *a,const void *b) //对结构体按照ID进行排序 11 { 12 return (*(IN *)a).id-(*(IN *)b).id; 13 } 14 15 int main() 16 { 17 char str[20]; 18 scanf("%s",str); 19 int i=0,boss,time,j,k; 20 while(str[0]!='#') 21 { 22 scanf("%d%d",&s[i].id,&s[i].time); 23 i++; 24 scanf("%s",str); 25 } 26 scanf("%d",&boss); //boss就是那个最后一个数字,意思是输出几组数据结束; 27 qsort(s,i,sizeof(s[0]),cmp); //对结构进行排序,当碰到周期相同时,按顺序输出即可 28 for(j=0,k=0,time=1;j<boss;time++) //j就是输出的次数 29 { 30 for(;k<i;k++) 31 { 32 if(time%s[k].time==0) 33 { 34 printf("%d ",s[k].id); //没输出一次j+1 35 j++; 36 } 37 } 38 k=0; 39 } 40 return 0; 41 }