猜年龄-课程笔记

Ordinary_Data 2022-06-08 17:14:49

设年龄为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;
    }

}


...全文
52 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18

社区成员

发帖
与我相关
我的任务
社区管理员
  • community_1719
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧