解决百钱买百鸡问题,某人有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次。