本题要求统计 n 个正整数中“美丽数字”的个数。
美丽数字的定义为:
也就是说,对一个数 x,它美丽当且仅当:
需要特别注意,像 72 这样既是 9 的倍数又是 8 的倍数的数 不算 美丽数字。
题目要求非常简单明了,只需:
x % 9 == 0 && x % 8 != 0;因为只需要一次遍历,不需要额外的数组或复杂的数据结构,直接模拟即可。
ans = 0。x % 9 == 0 且 x % 8 != 0,执行 ans++。ans。% 用来求余数。x % y == 0 表示 x 是 y 的倍数。&& 连接。int 类型完全足够。在 n≤105 的规模下,该算法可以在极短时间内运行完成(远小于 1000ms 的限制)。
下面是完整的 C++ 实现,代码中给出了详细注释。
cpp1#include <iostream> 2using namespace std; 3 4int main() { 5 int n; 6 cin >> n; // 读入数字个数 7 8 int ans = 0; // 美丽数字计数器 9 10 for (int i = 1; i <= n; i++) { 11 int x; 12 cin >> x; // 读入每个数字 13 14 // 判断是否为美丽数字 15 if (x % 9 == 0 && x % 8 != 0) { 16 ans++; // 满足条件则计数 17 } 18 } 19 20 cout << ans << "\n"; // 输出结果 21 return 0; 22}
#include <iostream>:包含输入输出流库。using namespace std;:使用标准命名空间,方便使用 cin / cout。int n; cin >> n;:读取正整数个数。int ans = 0;:美丽数字计数器初始化为 0。for (int i = 1; i <= n; i++):循环读入并处理 n 个数。
cin >> x; 读入当前数。if (x % 9 == 0 && x % 8 != 0) 判断是否是 9 的倍数且不是 8 的倍数。ans++。cout << ans << "\n"; 输出结果并换行。本题考察的是对倍数判断的基本理解以及简单的条件组合。只要注意美丽数字的定义(是 9 的倍数,但不能是 8 的倍数),使用模运算和逻辑与即可轻松解决。