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

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

        定义数组并存储一些朋友对象,利用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);
    }
}
运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

策略为王股票软件源代码-----如何修改为自己软件05

上面是如何修改里面的图标和图片,,, 试用版下载: http://www.ninebulls.com/ 联系方式: support@ninebulls.com 常见问题: 1。源代码经编程后产生的目标文件执行后显示为试用版,这样是否正常?如何切换成专业版? 显示为评估版是正常的,注册后即切换成专业版。 Too…

【算法一则】做算法学数据结构 - 简化路径 - 【栈】

目录 题目栈代码题解 题目 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 ‘/’ 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表…

python使用ffmpeg分割视频为Hls分片文件/使用OpenSSL加密m3u8和TS文件

FFmpeg和OpenSSL是一个开源免费的软件&#xff0c;在官网上就能下载&#xff0c; FFmpage网址&#xff08;建议选择文件名full结尾的文件&#xff09;&#xff1a;Builds - CODEX FFMPEG gyan.dev OpenSSL网址&#xff08;建议选择win64的MSI文件&#xff09;&#xff1a;Win3…

vscode 中显示 pnpm : 无法加载文件 C:\Users\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本

vscode 中无法运行pnpm vscode中运行pnpm报错解决办法如下 vscode中运行pnpm报错 pnpm : 无法加载文件 C:\Users\AppData\Roaming\npm\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本 解决办法如下 1、用get-ExecutionPolicy命令在vscode终端查询状态 如果返回的是 Restr…

堆排序-升序和降序_TopK-N个数找找最大的前K个

一、堆排序 堆排序即利用堆的思想来进行排序&#xff0c;总共分为两个步骤:1.建堆 升序:建大堆 降序:建小堆 2.利用堆删除思想来进行排序 方法一&#xff1a;把数据拷贝进堆、把堆拷贝进数据 //弊端&#xff0c;1.需要先有一个堆 2.时间复杂度拷贝数据 void HeapSort(int* …

前端学习<四>JavaScript基础——18-数组之隐秘

之前学习的数据类型&#xff0c;只能存储一个值&#xff08;字符串也为一个值&#xff09;。如果我们想存储多个值&#xff0c;就可以使用数组。 数组简介 数组&#xff08;Array&#xff09;是属于内置对象&#xff0c;数组和普通对象的功能类似&#xff0c;都可以用来存储一…

一文了解HTTPS的加密原理

HTTPS是一种安全的网络通信协议&#xff0c;用于在互联网上提供端到端的加密通信&#xff0c;确保数据在客户端&#xff08;如Web浏览器&#xff09;与服务器之间传输时的机密性、完整性和身份验证。HTTPS的加密原理主要基于SSL/TLS协议&#xff0c;以下详细阐述其工作过程&…

C语言易错知识点(3):字符数组的修改、sscanf、sprintf

字符数组是一个很细节的语法&#xff0c;涉及很多知识点&#xff0c;这篇文章我主要分享一下如何理解字符数组&#xff0c;以及对应的sscanf、sprintf有什么用 1.字符数组的初始化以及内容修改易错点 字符数组的初始化方式有两种&#xff0c;一种是直接用字符串进行初始化&am…

蓝桥杯第2152题——红绿灯

问题描述 爱丽丝要开车去上班, 上班的路上有许多红绿灯, 这让爱丽丝很难过。为 了上班不迟到, 她给自己的车安装了氮气喷射装置。现在她想知道自己上班最 短需要多少时间。 爱丽丝的车最高速度是 米每秒, 并且经过改装后, 可以瞬间加速到小于 等于最高速的任意速度, 也可以瞵…

(Java)数据结构——图(第五节)Kruskal的实现最小生成树(MST)

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 Kruskal算法&#xff08;Kruskal的实现原理&#xff09; Kruskal算法的原理&#xff1a; 就是每次取最小的边&#xff0c;看看是不是与已经选择的构成回路&#x…

imu6xl点灯(C语言)

参考正点原子开发指南 根据原理图可以看出&#xff0c;我们需要设置低电平导通电路。 在原理图上找到LED0&#xff0c;对应IO为GPIO3 IO复用配置 IMX6UL每个引脚都可以复用 在用户手册第30章可以找到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03这个寄存器&#xff0c;地址为0x020E0068&…

洛谷-P1036 [NOIP2002 普及组] 选数

P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; const int N30; int n,r; int g[N]; //存用户输入的数 int arr[N]; //存答案 int res0; //存种类数bool is_prime(int y){ //求素数if(y<2){…

HarmonyOS实战开发-音视频录制、如何实现音频录制和视频录制功能的应用

介绍 音视频录制应用是基于AVRecorder接口开发的实现音频录制和视频录制功能的应用&#xff0c;音视频录制的主要工作是捕获音频信号&#xff0c;接收视频信号&#xff0c;完成音视频编码并保存到文件中&#xff0c;帮助开发者轻松实现音视频录制功能&#xff0c;包括开始录制…

2024年MCN商业模式运营体系行业发展分析

【干货资料持续更新&#xff0c;以防走丢】 2024年MCN商业模式运营体系行业发展分析 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 mcn运营资料包&#xff08;完整资料包含以下内容&#xff09; 目录 MCN机构运营方案的概要&#xff1a; 一、MCN机构定位与目…

Linux中安装seata

Linux中安装seata 一、准备1、环境2、下载3、上传到服务器4、解压 二、配置1、备份配置文件2、导入sql3、修改配置前4、修改配置后5、在nacos中配置 三、使用1、启动2、关闭 一、准备 1、环境 因为要在 nacos 中配置&#xff0c;要求安装并启动 nacos 。可以参考这篇博客。 …

接口优化技巧

一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c;其中发现最多的就是接口耗时过长的问题&#xff0c;就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案 二、接口优化方案总结 1.批处理 批量思想&#xff1a;批量操作数据库&a…

ObjectiveC-第一部分-基础入门-学习导航

专题地址:MacOS一站式程序开发系列专题 第一部分:基础入门学习导航 OSX-01-Mac OS应用开发概述:简单介绍下MacOS生态、Xcode使用以及使用Xcode创建app的方法OSX-02-Mac OS应用开发系列课程大纲和章节内容设计:介绍下此系列专题的文章内容组织形式以及此系列专题的覆盖内容…

《哈迪斯》自带的Lua解释器是哪个版本?

玩过《哈迪斯》&#xff08;英文名&#xff1a;Hades&#xff09;吗&#xff1f;最近在研究怎么给这款游戏做MOD&#xff0c;想把它的振动体验升级到更高品质的RichTap。N站下载了一些别人做的MOD&#xff0c;发现很多都基于相同的格式&#xff0c;均是对游戏.sjon文件或.lua文…

基于springboot smm vue的物流管理系统

本系统实现一个物流管理系统。具体功能描述如下&#xff1a; 系统其它信息管理&#xff1a;主要是针对系统的其他的信息进行管理&#xff0c;实现了系统的模块化的管理&#xff0c;系统的框架建设等信息的管理&#xff0c;具有系统的整合性功能的建立&#xff0c;支撑起整个系…

Deblurring 3D Gaussian Splatting去模糊3D高斯溅射

Abstract 摘要 Recent studies in Radiance Fields have paved the robust way for novel view synthesis with their photorealistic rendering quality. Nevertheless, they usually employ neural networks and volumetric rendering, which are costly to train and impede…