百钱买百鸡问题的最优解法

解决百钱买百鸡问题,某人有100元钱,要买100只鸡,公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只,问可买到的公鸡,母鸡,小鸡各为多少只,请把所有的可能性打印出来。

一,普通解法
思路:我们设a,b,c分别代表公鸡,母鸡以及小鸡。
由题可得到a+b+c=100和5a+3b+1/3*c=100这两个关系式,以及a,b,c的取值范围。下面是相关代码。
然后大概计算了660次。

for (int a = 0; a < (100/5); a++)
            {
                for (int b = 0; b < (100/3); b++)
                {
                    int c = 100 - a - b;
                    if (c%3==0&& 5*a+3*b+c/3==100)
                    {
                        Console.WriteLine("公鸡{0}只,母鸡{1},小鸡{2}", a, b,c);
                    }
                }
            }

二,最优解法
思路:
1.首先我们可以得到各鸡的
数量关系式:a+b+c=100。 (1)
以及钱的关系式:5a+3b+1/3*c=100 ;(2)
2.根据各鸡的数量关系式我们可以得到各鸡得数量范围:
0<=a<=20;
0<=b<=100/3,由于鸡的数量都是大于等于0的整数,所以0<=b<=33
根据数量关系式a+b+c=100,得47<=c<=100;

3.我们用3*(2) -(1)化简得:b=25- 7/4*a,由于鸡的数量都是大于等于0的整数,所以a必须是4得倍数。假如num是一个大于等于0的整数则a可表示为4num;则b可表示为25-7num,c可表示为75+3num;
4.我们根据0<=a<=20;得到num得范围为0<=num<=5;
根据0<=b<=33;得到num得范围为0<=num<=3;
根据0<=b<=33;得到num得范围为0<=num<=8;

所以num的最终范围为0<=num<=3;
然后用for循环遍历即可得到所有可能结果。

  for (int num = 0; num <= 3; num++)
            {
                Console.WriteLine("公鸡{0}只,母鸡{1},小鸡{2}", 4 * num, 25 - 7 * num, 75 + 3 * num);
            }

然后这种方法大概计算了4次。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值