✏️ 纠错
第 142 题 / 共 155 题

题目描述

如果一个正整数在十进制下的所有数位都相同,小 A 就会觉得这个正整数很优美。例如,正整数 6 的数位都是 6,所以 6 是优美的。正整数 99 的数位都是 9,所以 99 是优美的。正整数 123 的数位不都相同,所以 123 并不优美。

小 A 想知道不超过 n 的正整数中有多少优美的数字。你能帮他数一数吗?

输入格式

一行,一个正整数 n。

输出格式

一行,一个正整数,表示不超过 n 的优美正整数的数量。

输入输出样例

输入 #1

6

输出 #1

6

输入 #2

2025

输出 #2

28

说明/提示

对于所有测试点,保证 1≤n≤2025。

📝 题目解析

【考察内容】数位拆分、枚举、循环

【解析】该问题的核心在于判断每个正整数的各位数字是否完全相同。程序通过循环枚举从1到n的每一个数,对每个数提取其个位数字作为基准,再逐位检查其余数字是否与之相等。若全部相同,则计数器加一。算法时间复杂度为O(n×d),其中d为数字的位数,符合算法要求的时间复杂度。

#include <algorithm>
#include <cstdio>

using namespace std;

int n, ans;

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        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;
}