top1编程
← 返回题目
题解

【基础】奇怪的车牌号

1 条题解

  • 0
    @ 2026-7-29 0:15:45
    #include <bits/stdc++.h>
    using namespace std;
    
    // 判断一个四位数是否是递增的自然数
    bool isIncreasing(int num) {
        vector<int> digits;
        for (int i = 0; i < 4; ++i) {
            digits.push_back(num % 10);
            num /= 10;
        }
        reverse(digits.begin(), digits.end());
        for (int i = 1; i < 4; ++i) {
            if (digits[i] != digits[i - 1] + 1) {
                return false;
            }
        }
        return true;
    }
    
    // 计算一个八位数各位数字之和
    int digitSum(int num) {
        int sum = 0;
        while (num > 0) {
            sum += num % 10;
            num /= 10;
        }
        return sum;
    }
    
    // 判断一个数是否是完全平方数
    bool isPerfectSquare(int num) {
        int root = sqrt(num);
        return root * root == num;
    }
    
    int main() {
        int count = 0;
        // 枚举前四位
        for (int front = 123; front <= 6789; ++front) {
            if (isIncreasing(front)) {
                // 枚举后四位
                for (int back = 123; back <= 9876; ++back) {
                    if (isIncreasing(back)) {
                        int licensePlate = front * 10000 + back;
                        if (isPerfectSquare(digitSum(licensePlate))) {
                            ++count;
                        }
                    }
                }
            }
        }
        cout << count << endl;
        return 0;
    }
    
    • 1