B62
案例:闰年个数、奇偶统计、幸运数
引入
章前总览 三道真题都是 for 扫区间或 n 个数,里面套 if:计数闰年、分奇偶、累加幸运数。
三道案例:
- 闰年统计:区间内 cnt++
- 奇偶个数:两个计数器
- k 幸运数:个位为 k 或 k 的倍数则累加
1 案例1:闰年统计
输入起始、终止年份(含两端),输出闰年个数。
参考代码
#include <iostream>
using namespace std;
int main() {
int s, t, cnt = 0;
cin >> s >> t;
for (int y = s; y <= t; y++) {
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
cnt++;
}
cout << cnt << endl;
return 0;
}
- 样例:2018 2022 → 1;2000 2004 → 2。
2 案例2:奇数和偶数
输入 n,再输入 n 个正整数,输出奇数个数和偶数个数。
参考代码
#include <iostream>
using namespace std;
int main() {
int n, t;
int cnt1 = 0, cnt2 = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> t;
if (t % 2 != 0) cnt1++;
else cnt2++;
}
cout << cnt1 << " " << cnt2 << endl;
return 0;
}
- 也可只计奇数,偶数 = n − 奇数个数。
- 样例:5 个数 1..5 → 3 2。
3 案例3:小明的幸运数
个位为 k,或 k 的倍数,称为 k 幸运数。求 [L,R] 内所有 k 幸运数之和。
参考代码
#include <iostream>
using namespace std;
int main() {
int k, L, R;
cin >> k >> L >> R;
int s = 0;
for (int i = L; i <= R; i++) {
if (i % 10 == k || i % k == 0)
s += i;
}
cout << s << endl;
return 0;
}
- 样例:k=7,L=1,R=10 → 7;k=7,L=10,R=20 → 14+17=31。
小结
计数 / 累加只差一行:
符合 → cnt++ // 个数
符合 → s += i; // 数值和
✓
里程碑达成:
下一节练习:闰年求和、奇数和(含负数)、各位数字最大值。