测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看
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;   // 数值和
里程碑达成:

下一节练习:闰年求和、奇数和(含负数)、各位数字最大值。