题解
2026-02-05 23:37:25
发布于:浙江
27阅读
0回复
0点赞
题目解析
- 输入输出:输入一个正整数 ;输出一个整数,表示在区间 中所有数位都相同的"优美正整数"的个数。
- 数据范围:,数值范围较小,最多为四位数。
- 复杂度要求:时间复杂度 ( 为数字位数,最大为 ),空间复杂度 ,均在可接受范围内。
- 算法知识点:
字符串处理、模拟枚举、数位特性判断
思路解析
- 优美数字的判定:一个正整数是优美的,当且仅当其十进制表示的每一位数字都相同(如 )。
- 字符串比对法:将整数转换为字符串,构造一个与原字符串等长、且全部由首字符填充的新字符串。若两字符串相等,则说明原数字所有数位相同。
- 暴力枚举:由于 ,直接遍历 到 的每个整数,调用判定函数统计符合条件的个数即可。
完整代码
#include <bits/stdc++.h>
using namespace std;
// 判定函数:检查数字x的所有数位是否完全相同
bool check(int x) {
string s = to_string(x); // 将数字转为字符串
// 关键技巧:构造一个与s等长、全部由s[0](首字符)组成的字符串
string copy_s(s.size(), s[0]);
return copy_s == s; // 若相等则说明所有数位都相同
}
int main() {
int n;
cin >> n;
int ans = 0;
// 枚举1到n的所有正整数
for (int i = 1; i <= n; i++) {
if (check(i)) ans++; // 统计优美数字
}
cout << ans << endl;
return 0;
}
这里空空如也

有帮助,赞一个