标题: 猜年龄
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。
通过浏览器,直接提交他那时的年龄数字。
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。
通过浏览器,直接提交他那时的年龄数字。
注意:不要提交解答过程,或其它的说明文字。
结果:
18
思路:
先计算出立方和4次方后的数字的位数,并且取出它们每一位的数字,然后判断位数是否符合题意,最后判断是否包含0~9这10个数字。
代码如下:
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[10];
for(int i = 10; i < 90; i++){
int s1 = i * i * i;
int s2 = i * i * i * i;
int cnt1 = 1; //第一个位数
int cnt2 = 1; //第二个位数
while(true){ //判断第一个数的位数
arr[s1%10]++; //标记出现的数字
s1 /= 10;
if(s1!=0){
cnt1++; //计算出第一个数的位数
}else{
break;
}
}
while(true){ //判断第二个数的位数
arr[s2%10]++; //标记出现的数字
s2 /= 10;
if(s2!=0){
cnt2++; //计算出第二个数的位数
}else{
break;
}
}
int sum = 0;
if(cnt1==4 && cnt2==6){ //取出每一位数
for(int k=0;k<10;k++){
if(arr[k]==1){ //判断是否包含0~9
sum++;
}
if(sum==10){
System.out.println(i);
}
}
}else{
for(int k=0;k<10;k++){ //否则数组清零
arr[k]=0;
}
}
}
}
}