十位平方数展开目录
由 0~9 这 10 个数字不重复、不遗漏,可以组成很多 10 位数字。这其中也有很多恰好是平方数。比如:1026753849,就是其中一个最小的平方数。请你找出其中最大的一个平方数是多少?
思路 1展开目录
- 枚举答案 X [9876853210,1026753849](从最大的数枚举到最小的数)
- 判断是不是恰好 0-9 十个数字
判断是不是完全平方数
- 令 Y = int (sqrt (x))
- 判断 Y * Y == X
思路 2(优化)展开目录
- 枚举 Y [100000,30000]
- 计算 X = Y * Y
- 判断 X 是不是恰好是 0-9 十个数字
- //判断是不是包含0-9
- bool contains0_9(int x)
- {
- if(x == 0)
- return false;
- set<int> s;
- while(x)//把x的末位数字通过模10分离
- {
- int d = x % 10;
- s.insert(d);
- x /= 10;
- }
- return (s.size() == 10);
- }
- //完整代码
- #include <bits/stdc++.h>
- using namespace std;
- bool contains0_9(long long x)
- {
- set<int> s;
- while(x)
- {
- int d = x % 10;
- s.insert(d);
- x /= 10;
- }
- return (s.size() == 10);
- }
- int main()
- {
- for(long long y = 100000;y >= 30000;y--)
- if(contains0_9(y * y))
- cout<<y * y<<endl;
- return 0;
- }