XTTian @ 2023-10-31 17:44:46
#include<iostream>
using namespace std;
int main()
{
int x = 0, y = 0, sum = 0, i = 0, j = 0;
int arr[10000]{};
cin >> x >> y;
for (; x <= y; x++)
{
if (((x % 100 != 0) && (x % 4 == 0)) || (x % 400 == 0))
{
arr[i] = { x };
sum++;
i++;
}
}
cout << sum << endl;
j = i;
for (i = 0; i <= j; i++)
{
cout << arr[i] << " ";
}
return 0;
}
by fzy1026 @ 2023-10-31 17:49:16
if (((x % 100 != 0) && (x % 4 == 0)) || (x % 400 == 0))
{
arr[i] = { x };
sum++;
i++;
}
这里
因为在记录操作后才进行i++,那么i的值一定是记录总数+1
所以最后一段输出时会输出一个空值(0)
by OIerWu_829 @ 2023-10-31 17:49:21
第 19 行,
改成 for (int i = 0; i < j; i++)
就行了。
因为数组下标是从
by OIerWu_829 @ 2023-10-31 17:51:35
@XTTian
再唠一句,如果你想从下标
那么就是 for (int i = 0; i < n; i++)
求关
by fzy1026 @ 2023-10-31 17:51:42
@XTTian 举例来说,假设一共有4个闰年
那么arr[4]记录的便是最后一个闰年的年份,并且在记录完后i++,i=5
而在最后遍历输出时,i最大会取到5(因为j=i=5),也就是输出arr[5].
但是arr[5]里面并没有存数并且已经初始化为0了,所以会输出0
by fzy1026 @ 2023-10-31 17:52:45
@wzj0829 正确的