栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础编程题(四)——古典问题(百钱买百鸡,猴子吃桃,无限生兔子)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础编程题(四)——古典问题(百钱买百鸡,猴子吃桃,无限生兔子)

文章目录
  • 前言
    • 一、编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡一钱三只,现有百钱欲买百鸡,共有多少种买法?
    • 二、猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?
    • 三、古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    • 总结


前言

今天做了一些关于经典的古典问题的Java编程题,想来和大家一起分享一下。

或许还有比这里写的更好的方法,欢迎大家来指正和讨论。


一、编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡一钱三只,现有百钱欲买百鸡,共有多少种买法?

这道题,我先是自己写了一下,感觉自己写的太过于复杂了,于是到网上找了一些大佬们写的,看了之后,感觉他们写的代码更加精辟,又简单明了,在这里分享给大家。(里面的代码我都详细的注释了)

代码如下:

public class Homework11 {
    public static void main(String[] args){
        way1();
        way2();
    }
    //方法一:这个是一个网上大佬写的,逻辑清晰,简单明了,建议看这个
    static void way1(){
        //设公鸡数为cock
        for(int cock=0;cock<=20;cock++){
            //设母鸡数为hen
            for(int hen=0;hen<=33;hen++){
            	//钱数为100,鸡数为100
                if(cock*5+hen*3+(100-cock-hen)/3 == 100 && (100-cock-hen)%3 == 0){
                    System.out.println("公鸡" + cock + "只,母鸡" + hen + "只,小鸡" + (100 - cock - hen) + "只。");
                }
            }
        }
    }
    //根据大佬的做法改了一点的,练练手
    static void way2(){
        //设公鸡数x
        for(int x=0;x<20;x++){
            //设母鸡数y
            for (int y=0;y<33;y++){
                //设小鸡数z
                for (int z=0;z<300;z++){
                    if(x*5+y*3+z/3==100 && x+y+z==100 && z%3 == 0){
                        System.out.println("公鸡"+x+"只,母鸡"+y+"只,小鸡"+z+"只。");
                    }
                }
            }
        }
    }
}

结果如下:

公鸡0只,母鸡25只,小鸡75只。
公鸡4只,母鸡18只,小鸡78只。
公鸡8只,母鸡11只,小鸡81只。
公鸡12只,母鸡4只,小鸡84只。
公鸡0只,母鸡25只,小鸡75只。
公鸡4只,母鸡18只,小鸡78只。
公鸡8只,母鸡11只,小鸡81只。
公鸡12只,母鸡4只,小鸡84只。
二、猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?

代码如下:

public class Homework16 {
    public static void main(String[] args){
        int total=1;
        //天数初始为10,然后往下减
        int day=10;
        //循环
        for(int i=10;i>0;i--){
            System.out.println("第"+day+"天有"+total+"个桃子");
            //桃子的算法
            total = (total+1)*2;
            day--;
        }
    }
}

结果如下:

第10天有1个桃子
第9天有4个桃子
第8天有10个桃子
第7天有22个桃子
第6天有46个桃子
第5天有94个桃子
第4天有190个桃子
第3天有382个桃子
第2天有766个桃子
第1天有1534个桃子
三、古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

这个问题,如果就那么一直想,自己的思绪会很乱,把每个月的兔子数列出来后,就会发现就是一个单纯的数学问题而已。

代码如下(配备详细的注释):

import java.util.Scanner;

public class Homework19 {
    
    public static void main(String[] args){
        way1();
        way2();
    }


    //方法一:直接输出所有月份的月子数
    static void way1(){
        //i为初始兔子对数,j为每月增加兔子对数
        int i=1,j=0;
        for(int month=1;month<=12;month++){
            int x = i;
            System.out.println("第"+month+"个月有"+2*i+"只兔子");
            i = i +j;
            j = x;
        }
        System.out.println();
    }

    //方法二:输入月份找兔子的方法(下面两个是一起的)
    static void way2(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入月份:");
        int n = sc.nextInt();
        System.out.println("第"+n+"月兔子数为:"+2*fun(n));
    }
    //计算每月兔子的方法(如果看懂规律,这是最简单明了了)
    static int fun(int n){
        if(n==1||n==2) {
            //这里的1为兔子对数
            return 1;
        }
        else{
            return  fun(n-1)+fun(n-2);
        }

    }
}

结果如下:

第1个月有2只兔子
第2个月有2只兔子
第3个月有4只兔子
第4个月有6只兔子
第5个月有10只兔子
第6个月有16只兔子
第7个月有26只兔子
第8个月有42只兔子
第9个月有68只兔子
第10个月有110只兔子
第11个月有178只兔子
第12个月有288只兔子

请输入月份:
8
第8月兔子数为:42

总结

提示:这里对文章进行总结:
这些问题说是古典问题,实际上都是一些数学问题,不要光看题目,自己一个人乱想,把自己弄懵了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531962.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号