题目输入两个年份,要求按从大到小的顺序输出两个年份之间所有的闰年(包含边界),两个年份之间用西文空格隔开,且最后一个年份后面不允许有空格。
题目还给了两个样例:
样例1:
输入:1963 1984
输出:1984 1980 1976 1972 1968 1964
样例2:
输入:1999 1999
输出:NULL
要求还蛮多的,不过还好。闰年的判断是经典的编程入门题,至于所谓的空格,或许我们第一个想法是判断最后一个年份,让它的输出不带空格。但换个角度想,为什么不判断第一个呢?很明显,第一个要比最后一个更好欺负,因为它站在明面上,揪过来就可以修理。
这样,我们只需要第一个年份单独输出,其余的年份按照空格年份输出即可。
代码如下:
#include <stdio.h>
int main()
{
int year1 = 0;
int year2 = 0;
int i = 0;
int count = 0;
scanf("%d %d", &year1, &year2);
for (i = year2; i > year1 - 1; i--)//从大到小输出
{
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
{
if (!count)
{
printf("%d", i);
count++;
}
else
{
printf(" %d", i);
}
}
}
if (!count)
{
printf("NULL");
}
return 0;
}
好像是没问题的,但其实我们(当然,可能只有我)太天真了。人家那么老实?样例1是小的年份在前,大的年份在后,但人家可没保证一定如此。
所以,我们还需要加一段代码,确保小年份在前,大年份在后(也可以反过来,看你代码怎么写,总之,一定要保持一致):
if (year1 > year2)
{
int t = 0;
t = year1;
year1 = year2;
year2 = t;
}
或者,也可以用三目操作符。不过,下面的用法是错误的。
year1 = (year1 > year2 ? year2 : year1);
year2 = (year1 > year2 ? year1 : year2);
输出结果如下:
我们仔细调试一下:
原来,在我们把小的年份给year1的时候,year1所代表的年份缺少备份,这就导致year1和year2相等,输出异常也就不奇怪了。
-End-
本人小白,若有疏漏,请各位大佬多多包容、指正!
如果本文对你有帮助的话,请不要吝惜你的点赞~