题解
幸运数字
1 条题解
-
0
P4382 幸运数字(入门)
解题思路
每个学生的幸运数字是 0 到 9 之间的整数,题目要我们统计喜欢每个数字的学生人数。
数字一共只有 10 种,最适合用"计数数组":开一个长度为 10 的数组 cnt,cnt[x] 就表示喜欢数字 x 的学生人数。读入每个学生的时候,直接用 cnt[x]++ 把对应数字的人数加 1。全部读完后,依次输出 cnt[0]、cnt[1]……cnt[9] 就行了。
拿样例验证:12 个学生喜欢的数字是 0 9 9 7 7 6 6 6 8 8 8 6。喜欢 0 的有 1 人,喜欢 1 到 5 的都是 0 人,喜欢 6 的有 4 人,喜欢 7 的有 2 人,喜欢 8 的有 3 人,喜欢 9 的有 2 人。输出 "1 0 0 0 0 0 4 2 3 2",和样例一致。
边界情况:数组一定要先初始化成 0,写成 int cnt[10] = {0},否则数组里是垃圾值。数字 0 也要统计,数组下标从 0 开始正好对应。输出时 10 个数之间用空格隔开,最后一个数后面不要有多余空格。
参考代码
// 程序用途:统计n名同学幸运数字0~9各出现多少次(受欢迎程度) #include <iostream> using namespace std; int main() { int n; cin >> n; int cnt[10] = {0}; // cnt[x]表示喜欢数字x的学生人数 for (int i = 0; i < n; i++) { int x; cin >> x; // 读入一个幸运数字 cnt[x]++; // 对应数字的人数加1 } for (int i = 0; i < 10; i++) { // 依次输出0~9各自的人数 if (i > 0) cout << " "; cout << cnt[i]; } cout << endl; return 0; }复杂度分析
要读入 n 个数,循环 n 次,时间复杂度是 O(n);计数数组长度固定为 10,额外空间复杂度是 O(1)。
- 1