百元买百鸡问题

一、假设公鸡2元一只,母鸡1.5元一只,小鸡0.5元一只,现用100元买一百只鸡。

解决方案一:枚举法

把每一种情况都罗列出来,找出符合条件的情况。

        int x,y,z;
        int times = 0;
        int index = 1;
        for (x = 0;x <= 100;x++){
            for (y = 0; y <= 100;y++){
                for (z = 0;z <= 100;z++){
                    times++;
                    if (x + y + z == 100 && 2*x +1.5*y + 0.5*z == 100){
                        System.out.println("方案"+index+": 公鸡:"+x+"只 母鸡:"+y+"只 小鸡:"+z+"只");
                        index++;
                    }
                }
            }
        }
        System.out.println("总共循环了"+times+"次");

1.优化1.0版

  • 利用x+y+z=100解出z=100-x-y,减少一层循环。

        int x,y,z;
        int times = 0;
        int index = 1;
        for (x = 0;x <= 100;x++){
            for (y = 0; y <= 100;y++){
                z = 100 - x - y;
                times++;
                if (x + y + z == 100 && 2*x +1.5*y + 0.5*z == 100){
                    System.out.println("方案"+index+": 公鸡:"+x+"只 母鸡:"+y+"只 小鸡:"+z+"只");
                    index++;
                }
            }
        }
        System.out.println("总共循环了"+times+"次");

2. 优化2.0版

  • 方程一:100 = x+ y +z

  • 方程二:100 = 2*x+1.5y+0.5z 200 = 4*x + 3*y + z

根据方程一和方程二推出方程三:100 = 3*x+2*y y = (100-3*x)/2 ,由此得知x只能取偶数,而且最大为32。

        int x,y,z;
        int times = 0;
        int index = 1;
        for (x = 0;x <= 32;x+=2){
            y = (100 - 3*x)/2;
            z = 100 - x - y;
            times++;
            if (x + y + z == 100 && 2*x +1.5*y + 0.5*z == 100){
                System.out.println("方案"+index+": 公鸡:"+x+"只 母鸡:"+y+"只 小鸡:"+z+"只");
                index++;
            }
        }
        System.out.println("总共循环了"+times+"次");
总结:根据题目设未知数并列出方程,三个变量x,y,z,两个方程,只有两个变量被约束,一个变量自由,所以得出至少一层循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值