top1编程
← 返回题目
题解

【入门】找数游戏

1 条题解

  • 0
    @ 2026-7-30 0:49:17

    解题思路

    枚举所有三位数,取出百位、十位、个位。检查三个数字互不相同,且十位数字大于百位和个位。最后判断百位与十位的和不是质数。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        for (int n = 100; n <= 999; n++) {
            int a = n / 100;
            int b = n / 10 % 10;
            int c = n % 10;
    
            // 三个数字必须互不相同
            if (a == b || a == c || b == c) {
                continue;
            }
    
            // 十位数字要大于百位和个位之和
            if (b <= a + c) {
                continue;
            }
    
            // 判断百位和十位的和是不是质数
            int s = a + b;
            bool p = true;
            if (s < 2) {
                p = false;
            }
            for (int i = 2; i * i <= s; i++) {
                if (s % i == 0) {
                    p = false;
                }
            }
    
            if (!p) {
                cout << n << endl;
            }
        }
        return 0;
    }
    

    复杂度分析

    这道题最多只进行有限次数的循环,时间复杂度为 O(n);代码只使用了几个变量,空间复杂度为 O(1)。

    • 1