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 1582x<y3000

1.题目分析

输入两个年份,作为一个区间,判断这个区间的闰年,先打印有多少个闰年,再依次打印区间中的闰年。
说一下闰年的判断方法:能被4整除且不能被100整除 或者 能被400整除。

2.题目思路

输入年份区间,定有数组索引存放年份,初始化为0,
循环区间,判断闰年,如果是计数器加一,存放年份到下标,标记为1.
循环结束打印次数。循环年份数组,打印非零标记的下标即可。

3.代码实现

#include 

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;
}

你可能感兴趣的:(刷题go,go,go,算法,c语言,数据结构)