GESP二级 2025年09月 优美的数字
相对而言,2025年09月份的二级题目难度比2025年06月份题目的难度要略低一些,比较符合GESP二级考生的水平。对于本题而言,除了上述解法,如果学习过字符串等,也可以考虑字符串等方式。
·
题目
试题名称:优美的数字
时间限制:1.0s
内存限制:512.0MB
题目描述
如果一个正整数nnn在十进制下的所有数位都相同,小A就会觉得这个正整数很优美。例如,正整数6的数位都是6,所以6是优美的。正整数99的数位都是9,所以99是优美的。正整数123的数位不都相同,所以123并不优美。
小A想知道不超过nnn的正整数中有多少优美的数字。你能帮他数一数吗?
输入格式
一行,一个正整数nnn。
输出格式
一行,一个正整数,表示不超过nnn的优美正整数的数量。
输入样例1
6
输出样例1
6
输入样例2
2025
输出样例2
28
数据范围
对于所有测试点,保证1≤n≤20251 \le n \le 20251≤n≤2025。
解析
方式一
官方解法中,是传统的思路:遍历1~nnn之间的所有数字,然后拆分数位,之后判断数位是否一致。
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int main()
{
// 获取数字n
scanf("%d", &n);
// 遍历1~n之间的所有数字
for (int i = 1; i <= n; i++) {
// v和t拆分数位,chk表示用于标记是否是优美数字
int v = i % 10, t = i / 10, chk = 1;
while (t) {
// 判断数位是否相等
if (t % 10 != v) chk = 0;
t /= 10;
}
ans += chk;
}
// 输出结果
printf("%d\n", ans);
return 0;
}
方式二
根据题目,优美的数字指的就是各个数位上的数字一致,即:
x,xx,xxx,xxxx,xxxxx,… x,xx,xxx,xxxx,xxxxx,\dots x,xx,xxx,xxxx,xxxxx,…
即由单个数字xxx重复来构成的。所以,本题的解题思路也可以如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
// 获取正整数n
int n;
cin >> n;
// 记录个数
int x = 0;
// 即1~9之间的数字重复构成优美数字
for (int i = 1; i < 10; i++){
// 记录优美的数字
int a = i;
while ( a <= n){
x++;
a = a * 10 + i;
}
}
cout << x;
return 0;
}
总结
相对而言,2025年09月份的二级题目难度比2025年06月份题目的难度要略低一些,比较符合GESP二级考生的水平。对于本题而言,除了上述解法,如果学习过字符串等,也可以考虑字符串等方式。
更多推荐



所有评论(0)