题目内容
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。
代码
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
/*
* 我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。
*/
for(int i=10;i<=100;i++) {
int age1=i*i*i; //先筛选出第一个值年龄的立方
int age2=age1*i; //年龄的四次方
String s=age1+""; //转为字符串处理
String s2=age2+"";
if(s.length()==4&&s2.length()==6&&check(s+s2)) { //判断是否长度达到10,并且没有重复
System.out.println(i);
break;
}
}
}
private static boolean check(String string) {
// TODO Auto-generated method stub
Set<Character> set=new HashSet<Character>(); //利用set集合完美去重,对单个字符判断应该将string转为character
for (int i = 0; i < string.length(); i++) {
set.add(string.charAt(i));
if(set.size()==10) {
break;
}
}
return set.size()==10;
}
}