top1编程
← 返回题目
题解

【基础】既生瑜,何生亮!

1 条题解

  • 0
    @ 2026-7-30 1:07:31

    解题思路

    按照题目给出的规则读入数据,逐步计算结果并输出。

    参考代码

    // 这道题的做法:先读入题目给出的数据,再用简单的循环和判断完成要求。
    #include <iostream>
    #include <set>
    using namespace std;
    
    int main() {
        int x, y;
        cin >> x >> y;
        
        for (int n = x; n <= y; n++) {
            long long square = (long long)n * n;
            
            // 检查平方是否为7位数
            if (square < 1000000 || square > 9999999) {
                continue;
            }
            
            // 检查7个数字是否互不相同
            set<int> digits;
            long long temp = square;
            bool unique = true;
            
            while (temp > 0) {
                int digit = temp % 10;
                if (digits.count(digit)) {
                    unique = false;
                    break;
                }
                digits.insert(digit);
                temp /= 10;
            }
            
            if (unique && digits.size() == 7) {
                cout << n << endl;
            }
        }
        
        return 0;
    }
    

    复杂度

    代码只使用了简单变量、循环和判断。若循环检查了 n 个数据,时间复杂度通常为 O(n);没有开辟与输入规模相关的额外数组时,空间复杂度为 O(1)。

    • 1