Java算法小练习——五道经典算法题

news2024/11/24 12:02:17

练习一:按照要求进行排序

        定义数组并存储一些朋友对象,利用Arrays中sort方法进行排序

        要求1:属性有姓名、年龄、身高。

        要求2:按照年龄的大小进行排序,年龄一样,按身高排序,身高一样安姓名的字母进行排序         (姓名中只能有中文)

代码:

我们先编写朋友类:

朋友类Friend:
public class Friend {
    //属性有姓名、年龄、身高。
    private String name;
    private int age;
    private double height;


    public Friend() {
    }

    public Friend(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return height
     */
    public double getHeight() {
        return height;
    }

    /**
     * 设置
     * @param height
     */
    public void setHeight(double height) {
        this.height = height;
    }

    public String toString() {
        return "Friend{name = " + name + ", age = " + age + ", height = " + height + "}";
    }
}

再编写main方法:

测试类AlgorithmTest1:
public class AlgorithmTest1 {
    public static void main(String[] args) {
        //定义数组并存储一些朋友对象,利用Arrays中sort方法进行排序
        //要求1:属性有姓名、年龄、身高。
        //要求2:按照年龄的大小进行排序,年龄一样,按身高排序,身高一样安姓名的字母进行排序
        //(姓名中只能有中文)

        //创建女朋友对象
        Friend gf1 = new Friend("yang", 21, 170);
        Friend gf2 = new Friend("ye", 20, 168);
        Friend gf3 = new Friend("le", 22, 166);
        //创建数组并存储女朋友对象
        Friend[] friendArr = {gf1,gf2,gf3};
        //进行排序
        Arrays.sort(friendArr, (o1,o2) -> {
                if(o1.getAge() != o2.getAge()){
                    return o1.getAge() - o2.getAge();
                } else if(o1.getHeight() != o2.getHeight()) {
                    return (int) (o1.getHeight() - o2.getHeight());
                } else {
                    return o1.getName().compareTo(o2.getName());
                }
        });

        for (int i = 0; i < friendArr.length; i++) {
            System.out.println(friendArr[i].toString());
        }
    }
}
运行结果:

练习二:不死神兔

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

分析:

        根据题目所述,即兔子出生后第一个月是小兔子,第二个月成长为大兔子,第三个月开始生小兔子,第一个月1只兔子,第二个月1只兔子,第三个月生了小兔子变成2只兔子(一只生兔子,一只小兔子),第四个月3只(一只生兔子,一致大兔子,一致小兔子),第五个月5只(两只生兔子,一只大兔子,两只小兔子),第六个月8只(三只生兔子,两只大兔子,三只小兔子)

        通过上述数据,我们可以推断出,除去第一月第二月,每个月分的兔子个数等于前一个月和前前个月兔子个数之和我们便可以通过这个特点使用递归方法编写代码。

代码:
public class AlgorithmTest2 {
    public static void main(String[] args) {
        /*有一个很有名的数学逻辑题叫做不死神兔问题,有一对兔子,从出生后第三个月起每个月都生一对兔子,
        小兔子长到第三个月后每个月又生一对兔子,加入兔子都不死,问第十二个月的兔子对数为多少?*/

        //n > 2
        //n月的兔子个数 = (n-1)月的兔子个数 + (n-2)月的兔子个数
        //(n-1)月的兔子个数 = (n-2)月的兔子个数 + (n-3)月的兔子个数
        //……
        int num = getNum(12);
        System.out.println(num);

    }
    //使用递归
    public static int getNum(int month) {
        //出口
        if(month == 1 || month == 2) {
            return 1;
        }
        return getNum(month - 1) + getNum(month - 2);
    }
}
运行结果:

练习三:猴子吃桃子

        有一堆桃子,猴子第一天吃了其中一半,并多吃了一个,以后猴子每天都吃当前剩下来的一般,然后再多吃一个,第10天还没吃的时候,发现已经剩下一个桃子了,请问,最初有多少个桃子?

分析:

        前一天的桃子数 / 2 - 1 = 第二天的桃子数,即前一天桃子数=(后一天的桃子数 + 1)* 2

        第十天的桃子数为1。

        可以通过这两个条件使用递归方法求出第一天有多少个桃子

代码:
public class AlgorithmTest3 {
    public static void main(String[] args) {
        /*有一堆桃子,猴子第一天吃了其中一半,并多吃了一个,以后猴子每天都吃当前剩下来的一般,
        然后再多吃一个,第10天还没吃的时候,发现已经剩下一个桃子了,请问,最初有多少个桃子?*/

        int num = getNum(1);
        System.out.println(num);
    }

    public static int getNum(int day) {
        if(day == 10) {
            return 1;
        }
        return (getNum(day + 1) + 1) * 2;
    }
}
运行结果:

练习四:爬楼梯

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

分析:

        因为一次只可以爬1个台阶或者2个台阶,所以爬到第20个台阶的爬法 = 爬到第18个台阶的爬法 + 爬到第19个台阶的爬法,因为爬到第20个台阶只需要爬到第18爬两个台阶,或者爬到第19个台阶后爬一个台阶。所以我们可以通过这个特点采用递归方法。

代码:
public class AlgorithmTest4 {
    public static void main(String[] args) {
        /*小明特别喜欢爬楼梯,他有时候一次爬一个台阶,有时候一次爬两个台阶,
        如果这个楼梯有20个台阶,小明一个有多少种爬法呢?*/
        int num = getNum(20);
        System.out.println(num);
    }

    public static int getNum(int number) {
        if(number == 1) {
            return 1;
        }
        if(number == 2) {
            return 2;
        }
        return getNum(number - 1) + getNum(number - 2);
    }
}
运行结果:

练习五:爬楼梯进阶版

        小明特别喜欢爬楼梯,他有时候一次爬一个台阶,有时候一次爬两个台阶,有时候一次爬三个台阶,如果这个楼梯有20个台阶,小明一个有多少种爬法呢?

分析:

        其实万变不离其宗,这种情况下第20个台阶的爬法就等于到第17个台阶的爬法加上到第18个台阶的爬法再加上到第19个台阶的爬法.

代码:
public class AlgorithmTest5 {
    public static void main(String[] args) {
        /*小明特别喜欢爬楼梯,他有时候一次爬一个台阶,有时候一次爬两个台阶,有时一次爬三个台阶
        如果这个楼梯有20个台阶,小明一个有多少种爬法呢?*/

        int num = getNum(20);
        System.out.println(num);
    }

    public static int getNum(int num) {
        if(num == 1) {
            return 1;
        }
        if(num == 2) {
            return 2;
        }
        if(num == 3) {
            //3种:1 1 1,1 2 ,2 1,3
            return 4;
        }
        return getNum(num - 1) + getNum(num - 2) + getNum(num - 3);
    }
}
运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1588946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MES对接日常:MES对接单据上下游关联怎么处理?

很多制造企业的信息化过程中&#xff0c;金蝶云星空作为企业资源规划&#xff08;ERP&#xff09;系统的核心&#xff0c;与制造执行系统&#xff08;MES&#xff09;的有效对接&#xff0c;对于实现生产管理的精细化、智能化至关重要。其中&#xff0c;单据关联作为打通ERP与M…

小程序地理位置权限申请+uniapp调用uni.getLocation

文章目录 一、小程序地理位置权限申请二、uniapp调用uni.getLocation 一、小程序地理位置权限申请 需要确保小程序类目已经填写 点击左侧导航栏找到最后的“设置”——“基本设置”——“前往填写” 在开发管理——接口设置——地理位置中可以看到&#xff1a; 即可点击想要申…

基于Springboot的二手交易平台

基于SpringbootVue的二手交易平台的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录页 首页 商品信息 商品求购 网站公告 留言反馈 个人中心 后台管理 后台首页 用户…

cephfs部署与使用

一、前言 CephFS&#xff08;Ceph File System&#xff09;是Ceph存储解决方案中的一个组件&#xff0c;它提供了一个分布式文件系统&#xff0c;允许用户在多个节点上访问和管理文件数据&#xff0c;相当于是共享文件系统&#xff0c;可应用于k8s的存储&#xff0c;linux系统的…

(Java)数据结构——图(第六节)Dijkstra实现单源最短路径

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 Dijkstra算法&#xff08;Dijkstra的实现原理&#xff09; 迪杰斯特拉算法的实现&#xff0c;很像Prim&#xff0c;基本原理是&#xff1a; 我先找到距离集合路径…

Day93:云上攻防-云服务篇对象存储Bucket桶任意上传域名接管AccessKey泄漏

目录 云服务-对象存储-权限配置不当 权限控制-公共读或公共读写&#xff1a;可完整访问但不显示完整结构目录 权限控制-Bucket授权策略&#xff1a;设置ListObject显示完整结构目录 权限控制-Bucket公共读写权限&#xff1a;公共读写直接PUT文件任意上传 云服务-对象存储-…

秋招算法刷题7

20240410 1.接雨水 方法一&#xff0c;动态规划&#xff0c;时间复杂度O&#xff08;n^2&#xff09;&#xff0c;空间复杂度O&#xff08;n&#xff09; public int trap(int[] height) { int nheight.length; if(n0){ return 0; } …

【报错】TypeError: Cannot read property ‘meta‘ of undefined

&#x1f608;解决思路 首先这里很明显我们能看到是缺少该参数&#xff1a;meta。 但是经过查找后发现和该参数无关。 &#x1f608;解决方法 后来我上网搜了下&#xff0c;网上的回答大部分偏向于是package.json这个文件中的tabBar.list数组对象只有一条的问题。 网上的大…

Nginx小册(博客笔记迁移)

nginx基础 1.常用命令 nginx -v #查看版本 ps -ef | grep nginx #输出linux进程、 nginx #启动nginx进程 nginx -s reload #重载配置 nginx -s stop # 停止进程 nginx -t # 检查是否有语法错误&#xff0c;以及配置文件地址2.nginx的配置文件 # 用户组的设置 windows上不生…

Llama2模型本地部署(Mac M1 16G)

环境准备 环境&#xff1a;Mac M1 16G、Conda Conda创建环境配置 使用Anaconda-Navigator创建python 3.8环境 切换到新建的conda环境&#xff1a; conda activate llama38 llama.cpp 找一个目录&#xff0c;下载llama.cpp git clone https://github.com/ggerganov/llama.…

Java后端平台的搭建

后端开发准备工作(配置Tomcat) 安装tomcat安装jdk 配置JAVA HONE(到java目录),path(到 bin 目录)解压Tomcat进入到bin目录,双击startup.bat启动tomcat访问 ip端口在conf目录的 server.xml配置端口 后端平台的搭建 创建Web项目(前提搭建好Tomcat配置) 注:一定要提前配置好Ma…

Android-NDK的linux交叉编译环境

NDK工具包下载 NDK 下载 | Android NDK | Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下载为例&#xff0c;下载后将压缩包解压至/usr目录下 CMakeLists编译选项设置 编译平台变量判断条件中增加一下android条件…

Okhttp全链路监控

目标&#xff1a; 1&#xff09;.监控网络请求的各个阶段 2&#xff09;获取每一个阶段的耗时和性能&#xff0c;用于性能分析。包括dns解析&#xff0c;socket连接时间&#xff0c;tls连接时间&#xff0c;请求发送时间&#xff0c;服务器接口处理时间&#xff0c;应答传输时…

Windows搭建LightPicture图片管理网站结合内网穿透实现公网访问本地图片

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…

数字证书在网络安全中的关键作用与日常应用

在当今数字化的时代&#xff0c;网络安全问题日益凸显&#xff0c;保护数据安全和用户隐私成为了人们关注的焦点。数字证书作为一种重要的网络安全技术&#xff0c;其在网络安全中扮演着关键的角色&#xff0c;并且在我们的日常生活中有着广泛的应用。现在给大家介绍简单介绍下…

数据结构——链表变形

数据结构——链表变形 带尾指针的链表尾插的变化 循环双向双向循环 我们在上次已经了解了单链表&#xff0c;今天我们来了解一下链表的各种变形&#xff0c;如果还没有了解过上面单链表的小伙伴可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/article/details/13…

避坑指南: “低代码开发平台”怎么选看这篇!附案例参考

从事TOB行业 9 年&#xff0c;深入体验过 10 余款低代码产品。 下面基于我的个人认知给大家讲一讲&#xff1a; 低代码开发平台该如何选&#xff1f;从哪些维度可以判断低代码平台适合你的企业&#xff1f;多家企业采用低代码平台的实践案例&#xff01; 目前市面上有超过 2…

vue快速入门(十)v-bind动态属性绑定

注释很详细&#xff0c;直接上代码 上一篇 新增内容 图片切换逻辑动态绑定的完整写法与简写方法 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

IDM激活步骤-亲测可用

前言&#xff1a;我试了3种方法&#xff0c;仅以下方法激活成功&#xff0c;其他都是30天试用 使用步骤&#xff1a; 1.从官网下载IDM并安装&#xff1a;https://www.internetdownloadmanager.com/ 2.下载激活工具&#xff1a;https://wwif.lanzouw.com/iSY2N16s81xi &#…

2024年第十四届MathorCup数学应用挑战赛B题解题思路

B题https://mbd.pub/o/bread/ZZ6Wm5dx 问题1:对于附件I(Pre_test文件夹)给定的三张甲骨文原始拓片图 片进行图像预处理&#xff0c;提取图像特征&#xff0c;建立甲骨文图像预处理模型&#xff0c;实现对 甲骨文图像干扰元素的初步判别和处理。 针对问题1&#xff0c;对于附件…