JAVA学习第十五章——四道经典算法题

文章包含四个Java算法实现:1)对包含女朋友对象的数组按年龄、身高、姓名排序;2)解决不死神兔问题,计算第十二个月的兔子对数;3)求解猴子吃桃问题,找出桃子最初的总数;4)使用递归计算小明爬楼梯的100种不同方式。
摘要由CSDN通过智能技术生成

算法题一

定义数组并存储一些女朋友对象,利用Arrays中的sort方法进行排序
要求1:属性有姓名、年龄、身高。
要求2:按照年龄的大小进行排序,年龄一样,按照身高排序,身高一样按照姓名的字母进行排序(姓名中不要有中文或特殊字符)

    public static void main(String[] args) {

        Demo gf1 = new Demo("one", 18, 172);
        Demo gf2 = new Demo("two", 18, 165);
        Demo gf3 = new Demo("three", 20, 189);
        Demo gf4 = new Demo("four", 22, 172);

        Demo[] arr = {gf1, gf2, gf3, gf4};

        Arrays.sort(arr, ((o1, o2) -> {

            double temp = o1.getAge() - o2.getAge();

            temp = temp == 0 ? o1.getAge() - o2.getAge() : temp;
            temp = temp == 0 ? o1.getHeight() - o2.getHeight() : temp;
            temp = temp == 0 ? o1.getName().compareTo(o2.getName()) : temp;

            if (temp > 0) {
                return 1;
            } else if (temp < 0) {
                return -1;
            } else {
                return 0;
            }

        }));
        System.out.println(Arrays.toString(arr));
    }

算法题二

有一个很有名的数学逻辑叫做不死神兔问题,有一对兔子,从出生后第三个月起,每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第十二个月的兔子对数为多少?

    public static void main(String[] args) {
        int[] arr = new int[12];

        arr[0] = 1;
        arr[1] = 1;

        for (int i = 2; i < 12; i++) {
            arr[i] = arr[i - 1] + arr[i - 2];
        }

        System.out.println(arr[11]);

    }

算法题三

有一堆桃子,猴子第一天吃了其中的一半,并多吃了一个,以后每天猴子都吃当前剩下来的一半,并多吃一个,第十天的时候,发现只剩下一个桃子了,请问,最初总共多少个?

    public static void main(String[] args) {

        int sum = 0;
        int day = 1;
        int count = 0;

        for (int i = 0; i < 9; i++) {
            day = (day + 1) * 2;
            sum = day;
        }
        System.out.println(sum);
    }

算法题四

可爱的小明特别喜欢爬楼梯,他有的 时候一次爬一个台阶,有的时候一次爬两个台阶,如果这个楼梯有100个台阶,小明一共有多少种爬法?

    public static void main(String[] args) {
        System.out.println(getCount(20));
    }

    public static int getCount(int n) {
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        return getCount(n - 1) + getCount(n - 2);
    }

Tips

以上学习内容均来自B站黑马程序员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值