百钱买百鸡,​ 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。​ 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

第一种方式(虽然好理解,但最笨最不提倡): 

package com.itheima.dome;

public class Demo01 {
    public static void main(String[] args) {
        //用于计算运算了多少次
        int count = 0;
        //公鸡的数量
        for (int i = 0; i <= 100; i++) {
            //母鸡的数量
            for (int j = 0; j <=100 ; j++) {
                //小鸡的数量
                for (int k = 3; k <=100 ; k++) {
                    count++;
                    if (i*5+j*3+k/3==100 && i+j+k==100&&k%3==0)
                        System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",i,j,k);
                }
            }
        }
        System.out.println("共进行了"+count+("次循环"));
    }
}

运行结果:

 

 第二种方式:

package com.itheima.demo;

public class Demo02 {
    public static void main(String[] args) {
        //用于计算运算了多少次
        int count = 0;
        //公鸡的数量(公鸡最多买20只)
        for (int i = 0; i <= 20; i++) {
            //母鸡的数量(母鸡最多买33只)
            for (int j = 0; j <=33 ; j++) {
                //小鸡的数量(100-公鸡数量-母鸡数量)
                for (int k = 3; k <=100-i-j ; k+=3) {
                    count++;
                    if (i*5+j*3+k/3==100 && i+j+k==100)
                        System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",i,j,k);
                }
            }
        }
        System.out.println("共进行了"+count+("次循环"));
    }
}

运算结果:

 第三种方式:

package com.itheima.dome;

public class Demo03 {

        public static void main(String[] args) {
            //用于计算运算了多少次
            int count = 0;
            //第1层循环,用于表示公鸡的范围,初始化表达式的变量定义为 x=0,判断条件是x<=20
            for(int x=0; x<=20; x++) {
                //第2层循环,用于表示鸡母的范围,初始化表达式的变量定义为 y=0,判断条件是y<=33
                for(int y=0; y<=33; y++) {
                    //这个时候,用于表示鸡雏的变量 z = 100 – x – y
                    int z = 100 - x - y;
                    
                    //判断表达式 z%3==0 和表达式 5*x + 3*y + z/3 = 100 是否同时成立
                    if(z%3==0 && 5*x+3*y+z/3==100) {
                        System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",x,y,z);
                    }
                    count++;
                }
            }
            System.out.println("共进行了"+count+("次循环"));
        }
}

运算结果:

第四种方式(最推荐的):

package com.itheima.dome;

public class Demo04 {

        public static void main(String[] args) {
            //用于计算运算了多少次
            int count = 0;
            //第1层循环,用于表示公鸡的范围,初始化表达式的变量定义为 x=0,判断条件是x<=20
            for(int x=0; x<=20; x++) {
                //第2层循环,用于表示鸡母的范围,初始化表达式的变量定义为 y=0,
                // 判断条件是y<=(100-x*5)/3  (买公鸡剩下的钱除以母鸡的单价)
                int Max_y = (100- x*5)/3;  //(因为避免每次内循环再次计算)
                for(int y=0; y <= Max_y; y++) {
                    //这个时候,用于表示鸡雏的变量 z = 100 – x – y
                    int z = 100 - x - y;
                    //判断表达式 z%3==0 和表达式 5*x + 3*y + z/3 = 100 是否同时成立
                    if(z%3==0 && 5*x+3*y+z/3==100) {
                        System.out.printf("公鸡%2d只,母鸡%2d只,小鸡%2d只%n",x,y,z);
                    }
                    count++;
                }
            }
            System.out.println("共进行了"+count+("次循环"));
        }
}

运算结果:

 通过最内层循环的次数来看,这四种方法是,从第一种到第四种,效率上是越来越高的

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值