题目链接
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;
}