POJ 2051

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 }
原文地址:https://www.cnblogs.com/Tree-dream/p/5338711.html