标题:平方十位数
由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。
这其中也有很多恰好是平方数(是某个数的平方)。
比如:1026753849,就是其中最小的一个平方数。
请你找出其中最大的一个平方数是多少?
注意:你需要提交的是一个10位数字,不要填写任何多余内容。
答案:9814072356
思路:很简答的枚举,1026753849开方是32043,0~9这10个数字能组成的最大数为9876543210,它的开方取整是99380。所以我们可以用99380开始往下枚举其平方数。 也可以直接从32043开始往上枚举,每次输出更大的数。
方法下:向下枚举
#include <iostream>
using namespace std;
bool check(long long x){
bool num[10];
for(int i=0;i<10;i++){
num[i]=false;
}
int f=0;
while(x!=0){
f++;
int y=x%10;
x=x/10;
if(!num[y]){
num[y]=true;
}else{
return false;
}
}
if(f==10){
return true;
}else{
return false;
}
return true;
}
int main() {
long long max=0;
for(long long i=10000;i<10000000;i++){
long long xx=i*i;
if((xx)%10000000000>0 && check(xx) && xx>max){
max=i*i;
cout<<xx<<endl;
}
}
return 0;
}
方法二:向上枚举
#include <iostream>
using namespace std;
bool check(long long x){
bool num[10];
for(int i=0;i<10;i++){
num[i]=false;
}
int f=0;
while(x!=0){
f++;
int y=x%10;
x=x/10;
if(!num[y]){
num[y]=true;
}else{
return false;
}
}
if(f==10){
return true;
}else{
return false;
}
return true;
}
int main() {
long long max=0;
for(long long i=10000;i<10000000;i++){
long long xx=i*i;
if((xx)%10000000000>0 && check(xx) && xx>max){
max=i*i;
cout<<xx<<endl;
}
}
return 0;
}