题目描述: 由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。这其中也有很多恰好是平方数(是某个数的平方)。
比如:1026753849,就是其中最小的一个平方数。
请你找出其中最大的一个平方数是多少?
解决方案 1.定义judge函数判断当前平方数的各个位数是否互不重复
2.判断开方后的数据范围(30000-100000),利用数据范围逐个搜索,满足该数平方后的最大十位数
代码实现
package Test;
public class Test4 {
static int[] res = new int[10];
static long max = 0;
public static void main(String[] args) {
for(long i = 30000; i < 100000; i++) {
if(judge(i*i) == true && i*i > max) {
max = i*i;
}
}
for(int n = 9; n >= 0; n--) {
res[n] = (int)(max % 10); //将max的各位数正序存放到res数组
max /= 10;
}
for(int i: res) {
System.out.print(i); //输出res数组
}
}
public static boolean judge(long num) {
boolean[] visit = new boolean[10]; //记录当前数组元素是否被标记过
while(num != 0) {
int sc = (int)(num % 10);
if(visit[sc] == true) return false; //当前元素被重复标记,返回false
visit[sc] = true;
num /= 10;
}
return true;
}
}