P5737 【深基7.例3】闰年展示
题目描述
输入 x , y x,y x,y,输出 [ x , y ] [x,y] [x,y] 区间中闰年个数,并在下一行输出所有闰年年份数字,使用空格隔开。
输入格式
输入两个正整数 x , y x,y x,y,以空格隔开。
输出格式
第一行输出一个正整数,表示 [ x , y ] [x,y] [x,y] 区间中闰年个数。
第二行输出若干个正整数,按照年份单调递增的顺序输出所有闰年年份数字。
样例 #1
样例输入 #1
1989 2001
样例输出 #1
3
1992 1996 2000
提示
数据保证, 1582 ≤ x < y ≤ 3000 1582\le x < y \le 3000 1582≤x<y≤3000。
1.题目分析
输入两个年份,作为一个区间,判断这个区间的闰年,先打印有多少个闰年,再依次打印区间中的闰年。
说一下闰年的判断方法:能被4整除且不能被100整除 或者 能被400整除。
2.题目思路
输入年份区间,定有数组索引存放年份,初始化为0,
循环区间,判断闰年,如果是计数器加一,存放年份到下标,标记为1.
循环结束打印次数。循环年份数组,打印非零标记的下标即可。
3.代码实现
#include <stdio.h>int main() {int x, y;//输入年份区间scanf("%d %d", &x, &y);int count = 0;//数组索引存放年份int arr[3001] = {0};for (int i = x; i <= y; ++i) {//判断闰年 能被4整除且不能被100整除 或者 能被400整除if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {//计数器加一count++;//存放年份arr[i] = 1;}}//打印次数printf("%d\n", count);for (int i = 0; i < 3001; ++i) {if (arr[i] != 0) {//打印闰年printf("%d ", i);}}return 0;
}