Java 鸡兔同笼(赶紧给你的孩子写出这个算法吧)

鸡兔同笼算法

在上一期讲到了Java的数组,上上期是Java的流程控制,上上上期讲的是数据类型和运算符,上上上上期讲到的是面向对象,下面来进行综合练习,求经典题目:鸡兔同笼(如果你有孩子了,给你孩子写个这样的算法吧)!


假设鸡 求出兔 得结果

import java.util.Scanner;

public class Main {

    /**
     * CSDN:第三女神
     * https://myhub.blog.csdn.net/
     * <p>
     * 鸡兔同笼(假设法求解)
     *
     * @param args
     */
    public static void main(String[] args) {

        int headNum;
        int footNum;

        Scanner scanner = new Scanner(System.in);

        System.out.println("==鸡兔同笼==");

        System.out.println("请输入鸡兔一共有多少个头:");
        headNum = scanner.nextInt();

        System.out.println("请输入鸡兔一共有多少个脚:");
        footNum = scanner.nextInt();

        //假设全是鸡,全是鸡应该有多少个脚
        int guessChickenFoot = 2 * headNum;

        //鸡脚比总数少多少?
        int differenceSumFoot = footNum - guessChickenFoot;

        //兔子脚比鸡脚多多少?
        int differenceFoot = 4 - 2;

        //那么兔子的只数就等于少的脚除以兔子脚比鸡脚多的数量
        int rabbitNum = differenceSumFoot / differenceFoot;

        //那么总头数减去求出的兔子的只数就是鸡的数量
        int chickenNum = headNum - rabbitNum;

        //得:
        System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");

    }
}

假设兔 求出鸡 得结果

import java.util.Scanner;

public class Main {

    /**
     * CSDN:第三女神
     * https://myhub.blog.csdn.net/
     * <p>
     * 鸡兔同笼(假设法求解)
     *
     * @param args
     */
    public static void main(String[] args) {

        int headNum;
        int footNum;

        Scanner scanner = new Scanner(System.in);

        System.out.println("==鸡兔同笼==");

        System.out.println("请输入鸡兔一共有多少个头:");
        headNum = scanner.nextInt();

        System.out.println("请输入鸡兔一共有多少个脚:");
        footNum = scanner.nextInt();

        //假设全是兔,全是兔应该有多少个脚
        int guessRabbitFoot = 4 * headNum;

        //兔脚比总数多多少?
        int differenceSumFoot = guessRabbitFoot - footNum;

        //兔子脚比鸡脚多多少?
        int differenceFoot = 4 - 2;

        //那么鸡的只数就等于多的脚除以兔子脚比鸡脚多的数量
        int chickenNum = differenceSumFoot / differenceFoot;

        //那么总头数减去求出的鸡的只数就是兔的数量
        int rabbitNum = headNum - chickenNum;

        //得:
        System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");

    }
}

抬腿法

抬腿法有:

  • 鸡抬一只脚,兔抬两只脚,求兔,得鸡
  • 鸡坐地(抬两只脚),兔抬两只脚,求兔,得鸡
  • 兔抬脚,求兔,得鸡

鸡抬一只脚,兔抬两只脚,求兔,得鸡

import java.util.Scanner;

public class Main {

    /**
     * CSDN:第三女神
     * https://myhub.blog.csdn.net/
     * <p>
     * 鸡兔同笼(抬腿法求解)
     *
     * @param args
     */
    public static void main(String[] args) {

        int headNum;
        int footNum;

        Scanner scanner = new Scanner(System.in);

        System.out.println("==鸡兔同笼==");

        System.out.println("请输入鸡兔一共有多少个头:");
        headNum = scanner.nextInt();

        System.out.println("请输入鸡兔一共有多少个脚:");
        footNum = scanner.nextInt();

        //假设所有的鸡抬起一只脚,所有的兔子抬起两只脚,那么此时兔脚数比鸡脚数多1,脚与头的总数差,就是兔子的数量

        //抬脚,求剩余脚
        int remainderFoot = footNum / 2;

        //脚与头的总数差就是兔子的只数
        int rabbitNum = remainderFoot - headNum;

        //头数减兔子只数就是鸡的数量
        int chickenNum = headNum - rabbitNum;

        //得:
        System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");
        
    }
}

鸡坐地(抬两只脚),兔抬两只脚,求兔,得鸡

import java.util.Scanner;

public class Main {

    /**
     * CSDN:第三女神
     * https://myhub.blog.csdn.net/
     * <p>
     * 鸡兔同笼(抬腿法求解)
     *
     * @param args
     */
    public static void main(String[] args) {

        int headNum;
        int footNum;

        Scanner scanner = new Scanner(System.in);

        System.out.println("==鸡兔同笼==");

        System.out.println("请输入鸡兔一共有多少个头:");
        headNum = scanner.nextInt();

        System.out.println("请输入鸡兔一共有多少个脚:");
        footNum = scanner.nextInt();

        //假设鸡抬起两只脚,兔子也抬起两只脚,那么地上的全是兔的脚,可求兔,得鸡

        //全抬脚,求剩余脚
        int remainderFoot = footNum - headNum * 2;

        //求兔
        int rabbitNum = remainderFoot / 2;

        //头数减兔子只数就是鸡的数量
        int chickenNum = headNum - rabbitNum;

        //得:
        System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");

    }
}

兔抬脚,求兔,得鸡

import java.util.Scanner;

public class Main {

    /**
     * CSDN:第三女神
     * https://myhub.blog.csdn.net/
     * <p>
     * 鸡兔同笼(抬腿法求解)
     *
     * @param args
     */
    public static void main(String[] args) {

        int headNum;
        int footNum;

        Scanner scanner = new Scanner(System.in);

        System.out.println("==鸡兔同笼==");

        System.out.println("请输入鸡兔一共有多少个头:");
        headNum = scanner.nextInt();

        System.out.println("请输入鸡兔一共有多少个脚:");
        footNum = scanner.nextInt();

        //先让兔子抬起来两只脚,求剩余脚,求差,求抬了多少脚,求兔,得鸡

        //兔子抬两只脚,求剩余脚
        int remainderFoot = headNum * 2;

        //差多少只脚?
        int differenceFoot = footNum - remainderFoot;

        //差的脚除以抬起的两只脚,求兔
        int rabbitNum = differenceFoot / 2;

        //头数减兔子只数就是鸡的数量
        int chickenNum = headNum - rabbitNum;

        //得:
        System.out.println("鸡的数量是:" + chickenNum + "只;兔子的数量就是:" + rabbitNum + "只");

    }
}

列表法(穷举法)

穷举,即列出所有情况,但是注意加上退出循环条件哟!以防死循环!

import java.util.Scanner;

public class Main {

    /**
     * CSDN:第三女神
     * https://myhub.blog.csdn.net/
     * <p>
     * 鸡兔同笼(列表法求解)
     *
     * @param args
     */
    public static void main(String[] args) {

        int headNum;
        int footNum;

        Scanner scanner = new Scanner(System.in);

        System.out.println("==鸡兔同笼==");

        System.out.println("请输入鸡兔一共有多少个头:");
        headNum = scanner.nextInt();

        System.out.println("请输入鸡兔一共有多少个脚:");
        footNum = scanner.nextInt();

        //开始假设,初始化鸡的数量是1
        int createChicken = 1;

        //初始化兔的数量减去初始化
        int createRabbit = headNum - createChicken;

        //列表,穷举
        while (true) {
            if (footNum == createChicken * 2 + createRabbit * 4) {

                //得:
                System.out.println("鸡的数量是:" + createChicken + "只;兔子的数量就是:" + createRabbit + "只");
                break;

            } else {
                createChicken++;
                createRabbit--;

                //加入条件判断,以防死循环
                if (createRabbit < 0) {
                    System.out.println("无符合条件");
                    break;
                }
            }
        }
    }
}

好了,你给孩子们写出了这个算法,他们从4小时的作业时间,减去了两个小时!!!
请为我点赞!!!也可以给个关注!!!

下一篇

Java 类和对象 今年的第一篇文章 https://myhub.blog.csdn.net/article/details/103794466





发布了99 篇原创文章 · 获赞 1020 · 访问量 76万+

猜你喜欢

转载自blog.csdn.net/qq_40881680/article/details/103721934