/* 标题:平方十位数 由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。 这其中也有很多恰好是平方数(是某个数的平方)。 比如:1026753849,就是其中最小的一个平方数。 请你找出其中最大的一个平方数是多少? 思路1: 1.枚举答案 X[9876543210,1026753849] 2.判断是不是恰好0-9十个数字 3.判断是不是完全平方数 令Y=int(sqrt(X)) 判断 Y*Y==X; 缺点:时间复杂度10^10,超时 思路2: 换种枚举方式 1.枚举X的平方根Y[100000,32043] 2.运用set容器 */
#include <iostream> #include <set> using namespace std; bool contain(long long x) { if (x==0) { return false; } set<long long> s; //分离x的各位数字,每次把x的末尾数字分离出去 while (x) { long long d = x % 10; s.insert(d); x /= 10; } return s.size() == 10; } int main() { for (long long i = 32043; i <=100000;++i) { long long x = i*i; if (contain(x)) { cout << x << endl; } } return 0; }答案:9814072356