hdu1076

题目链接

             An Easy Task

解题思路

         题目要求给出一个年份Y和一个整数N,输入从Y年起第N个闰年。
         首先我们容易知道我们需要判断一个年份是否是闰年,我们可以把它封装成一个函数,这样可以方便我们下次调用,在这里我写了一个is_leap_year来完成这个工作
         其次我们知道如果我们已经得到了第一个闰年,那么我们再得到下一个闰年只需不断的加4,然后判断是否是闰年即可(如果Y可以被100整除,即便Y可以被4整除它也不是闰年,故我们每次加4后要判断是否是闰年,如果不是的话要继续加四)。那么这里出现了两个问题,第一个是得到第一个闰年,第二个是得到下一个闰年。让我们分别解决这两个问题,如下。
         得到第一个闰年,看起来复杂实则简单,我们首先判断他是不是闰年如果不是的话不断的加(4 - Y % 4 )知道满足条件为止
         然后是得到下一个闰年,我们可以先加四然后判断是否满足条件,不满足的haul继续加四知道满足条件为止
         最后我们把上面的三个子问题组合起来就能得到原问题的解

我的代码

#include<stdio.h>

//判断是否是闰年
bool is_leap_year(int y)
{
    return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
}

//得到下一个闰年
int next_leap_year(int y)
{
    y += 4;
    while(!is_leap_year(y)) y+= 4;
    return y;
}

int main()
{
    int T,y,n;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&y,&n);

        while(!is_leap_year(y)) y += 4 - (y % 4);   //得到第一个闰年
        for(int i = 1; i < n; i++)  //得到第n个闰年
            y = next_leap_year(y);

        printf("%d\n",y);

    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/dongchengrong/article/details/78996921
今日推荐