优美数字:三种C++实现
题目来源:CCF-GESP 2025年9月二级C++。
题目描述
如果一个正整数在十进制下的所有数位都相同,小A认为这个正整数是优美的。例如666、999999。123123123就不优美。小A想知道不超过n的正整数中有多少优美的数字。
输入格式
一行,一个正整数n。
输出格式
一行,一个正整数,表示不超过n的优美正整数的数量。
输入输出样例 #1
输入:
6
输出:
6
输入输出样例 #2
输入:
2025
输出:
28
说明/提示
对于所有测试点,保证1≤n≤2025。
分析与实现
数据范围只有2025,直接枚举1到n也是可以的,但我们可以多想几种写法。
按位数分类直接判断
因为n最大2025,优美数只有1到9(一位数)、11,22,...,99(两位数)、111,222,...,999(三位数),以及1111(四位数)。所以可以针对位数分类统计。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, cnt = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
// 枚举 1 到 n
if (i < 10) { // 一位数,是优美数
cnt++;
} else if (i < 100 && i / 10 == i % 10) { // 两位数且个位与十位相等,是优美数
cnt++;
} else if (i < 1000 && i / 100 == i % && i / % == i % ) {
cnt++;
} (i == ) {
cnt++;
}
}
cout << cnt;
;
}

