18
社区成员




设年龄为1-100之间
条件:1.年龄的立方是个4位数
2.年龄的4次方是个6位数
3.10个数字不重复
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
for (int age =11; age <=100 ; age++) {//11岁就上大学,肯定是上了大学以后的年龄才当老师,所以初始age=11岁
String age3= age*age*age+"";//用字符串来表示,所以计算出age的立方后要+" ",把int类型转变成String类型
String age4= age*age*age*age+"";//计算age的4次方,同上理
if(age3.length()==4&&age4.length()==6&&CheckAge(age3,age4)){//判断立方数字和4次方数字的长度是否符合题意,并且去重
System.out.println(age);//输出结果
break;
}
}
}
public static boolean CheckAge(String age3,String age4){//这个方法的目的是对应题目中为10位数,且每个数字只出现1次
String str = age3+age4;//字符串可以直接拼接
Set<Character> set =new HashSet<Character>();//定义创建set集合
for (int i = 0; i <str.length() ; i++) {
set.add(str.charAt(i));//存放每个数字到set集合中,才能让每个数字都不重复
}
return set.size()==10 ;//当set集合的长度添加到10时返回
}
}
import java.util.Arrays;
/**
* 【问题描述】
* 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
* 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
* “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
* 请你推算一下,他当时到底有多年轻。
* 【问题分析】
* 穷举算法:对年龄进行穷举,从问题描述可以将年龄穷举范围定义在11~30之间(1~100也可以)。在穷举过程中对年龄进行检查,如果符合以下条件则输出结果
* (1)年龄的立方是个4位数
* (2)年龄的4次方是个6位数
* (3)10个数字不重复
*/
public class GetAge {
public static void main(String[] args) {
System.out.println(getAge());
}
/**
* 判断排序好的数组是否有重复元素
* @param array
* @return
*/
public static boolean isRepeat(char[] array){
for(int i=0;i<array.length-1;i++){
if(array[i]==array[i+1]){
return true;
}
}
return false;
}
/**
* 获取目标年龄
* @return
*/
public static int getAge(){
for (int i = 11; i <=100; i++) {
if((i*i*i)/1000>=1&&(i*i*i)/1000<10&&(i*i*i*i)/100000>=1&&(i*i*i*i)/100000<10){
String str=String.valueOf(i*i*i)+String.valueOf(i*i*i*i);
char[] array=str.toCharArray();
Arrays.sort(array);//将字符数组排序
if(!isRepeat(array)){
return i;
}
}
}
return 0;
}
}