首页 > 代码库 > HDU 1076 An Easy Task

HDU 1076 An Easy Task

对于闰年判断的题已经做过很多,但是这个题令我印象深刻。

刚开始,我的代码是

 1 #include<stdio.h>
 2 int is_leap(int n)
 3 {
 4     if((n%4==0&&n%100!=0)||n%400==0)
 5         return 1;
 6     else
 7         return 0;
 8 }
 9 int main()
10 {
11     int m;
12     scanf("%d",&m);
13     int i;
14     int a,b;
15     for(i=1;i<=m;i++)
16     {
17         scanf("%d%d",&a,&b);
18         if(is_leap(a)==1)
19             a+=4*(b-1);
20         else
21         {
22             int j;
23             for(;;a++)
24             {
25                 if(is_leap(a)==1)
26                     break;
27             }
28             a+=4*b;
29         }
30         printf("%d\n",a);
31 
32     }
33     return 0;
34 }

样例输入是

3

2005 25

1855 12

2004 10000

样例输出最后一组数据出错,说明这题的逻辑有错误。

正确的代码:

#include<stdio.h>
int main()
{
    int m;
    scanf("%d",&m);
    int i;
    int a,b;
    for(i=1;i<=m;i++)
    {
        int count = 0;
        scanf("%d%d",&a,&b);
        while(count<b)
        {
            if((a%4==0&&a%100!=0)||a%400==0)
            {
                count++;
                a++;
            }
            else
                a++;
        }
        printf("%d\n",a-1);
    }
}

这样即使在循环中遇到闰年,也不会出错了。

 

HDU 1076 An Easy Task