标题: 猜年龄
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。
通过浏览器,直接提交他那时的年龄数字。
注意:不要提交解答过程,或其它的说明文字。
解题思路:
直接利用循环加判断的组合暴力破解,set集合不允许有重复值,可以利用这个特性免去写“去重算法”
答案:18岁
import java.util.HashSet;
import java.util.Set;
/**
* 标题: 猜年龄
* 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
* 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
* “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
* 请你推算一下,他当时到底有多年轻。
* 通过浏览器,直接提交他那时的年龄数字。
* 注意:不要提交解答过程,或其它的说明文字。
*
* @author 攻城狮VLOG
*/
public class Main {
public static void main(String[] args) {
String str = "";
//循环出所有可能的年龄
for (int i = 0; i < 100; i++) {
String s1 = i * i * i + "";
String s2 = i * i * i * i + "";
if (s1.length() == 4) {//立方是个四位数
if (s2.length() == 6) {//四次方是个六位数
str = s1 + s2;
if (str.length() == 10) {//组合到一起是一个长度为10的字符串
Set set = new HashSet();//利用set集合没有重复值的特性将重复的值给去除掉
for (int j = 0; j < str.length(); j++) {
set.add(str.charAt(j));
}
if (set.size() == 10) {//如果去重之后长度还是10那么说明刚刚好包含0-9所有的数
System.out.println(i);
}
} else {
continue;
}
} else {
continue;
}
} else {
continue;
}
}
}
}