由0~9這10個數(shù)字不重復(fù)、不遺漏,可以組成很多10位數(shù)字。
這其中也有很多恰好是平方數(shù)(是某個數(shù)的平方)。比如:1026753849,就是其中最小的一個平方數(shù)。
請你找出其中最大的一個平方數(shù)是多少?
注意:你需要提交的是一個10位數(shù)字,不要填寫任何多余內(nèi)容。
思路1:
1.枚舉答案 X[9876543210,1026753849]
2.判斷是不是恰好0-9十個數(shù)字
3.判斷是不是完全平方數(shù)
令Y=int(sqrt(X))
判斷 Y*Y==X;
缺點:時間復(fù)雜度10^10,超時
思路2:
換種枚舉方式
1.枚舉X的開平方跟Y[100000,32043],相當于對區(qū)間的兩個端值開了平方根
2.運用set容器,來判斷所枚舉的x是否是不重復(fù)的10為數(shù)字
codes:
#include<iostream>
#include<set>
using namespace std;
//該函數(shù)求解的結(jié)果位數(shù)是否為10位
bool contain(long long n)
{
if(n == 0)
return false;
set<long long> s;
while(n)
{
long long m = n % 10;
s.insert(m);
n /= 10;
}
return s.size() == 10;//檢查是否為不重復(fù)的十位數(shù)字
}
int main()
{
for(long long i = 32043; i <= 100000; i++){//縮小范圍
long long x = i * i;//求平方
if(contain(x)){
cout << x << endl;//輸出結(jié)果
}
}
return 0;
}
You can leave me a message if you find out anything incorrect in my diary, I'll correct it, thanks.