标题: 猜年龄
美国数学家维纳(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位数。我年龄的4次方是个6位数”这句话给出了范围,通过大致估算一下便可知,18是四次方能达到六位数的最小值,而21是三次方是能达到四位数的最大值,那么只要判断这几个数就好了,还是先看代码吧
import java.util.*;
public class GuessYear{
public static boolean isCoverAllFigures(int n){
Set<Integer> set = new HashSet<Integer>(); //利用Set元素的不可重复性来判断是否包含0~9数字!
int tmp1 = (int)Math.pow(n, 3);
int tmp2 = (int)Math.pow(n, 4);
while(tmp1 != 0){ //可以再优化;
int t = tmp1 % 10;
set.add(t);
tmp1 = tmp1 / 10;
}
while(tmp2 != 0){
int p = tmp2 % 10;
set.add(p);
tmp2 = tmp2 /10;
}
if(set.size() == 10){
return true;
}
return false;
}
public static void main(String[] args){
for(int i = 18; i<22; i++){
if(isCoverAllFigures(i) == true ){
System.out.println("数学家维纳的年龄是"+i+"岁!");
}
}
}
}
其实填空题的话只要答案正确是不要求方法的。。所以还是要适当投机取巧!