解决百钱买百鸡问题,某人有100元钱,要买100只鸡,公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只,问可买到的公鸡,母鸡,小鸡各为多少只,请把所有的可能性打印出来。
一,普通解法
首先我们设a,b,c分别代表公鸡,母鸡以及小鸡。
由题可得到
a+b+c=100 5a+3b+1/3*c=100
这两个关系式,以及
abc
这三个变量的取值范围。
下面是相关代码
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("公鸡%d只,母鸡%d,小鸡%d", a, b,c);
}
}
}
二,最优解法
思路:
首先我们设a,b,c分别代表公鸡,母鸡以及小鸡。方向的话主要是有两个,一个是从总价出发,去求各种方式;第二个就是从总数出发,求方式。两者方式大致流程都差不多,我们这里选择总数去解决(后续可以给代码进行小小的升级一下!)
那么我们可以得到的条件如下
a+b+c=100
5a+3b+1/3*c=100
a<=(100/5)20
b<=(100/3)33
c<=(100/3)99/*这里的100/3是用数量除,因为如果买100块钱那就买了300只,不合题意*/
具体细看下面编程注释
#include <stdio.h>
int main()
{
int a,b,c,cnt=0;
for(a=0;a<=20;a++)//买公鸡
{
for(b=0;b<33;b++)//买母鸡
{
for(c=0;c<=100;c+=3)//买小鸡
{
if(a+b+c==100 && 5*a+3*b+c/3==100)
{
cnt++;
printf("第%d种买法:公鸡%d 母鸡%d 小鸡%d\n",cnt,a,b,c);
}
}
}
}
printf("共%d种买法!\n",cnt);
}
第1种买法:公鸡0 母鸡25 小鸡75
第2种买法:公鸡4 母鸡18 小鸡78
第3种买法:公鸡8 母鸡11 小鸡81
第4种买法:公鸡12 母鸡4 小鸡84
共4种买法!
三,小改进
那么,正式问题都已经可以比较好的解决。那就可以对代码进行一些小小的修改可以实现更多的功能!(帮小学生完成点作业)
首先,整个让这个逻辑题可以读取我们用户的思想,用户可以自己想要有多少钱,就有多少钱,想要多少只鸡就能有多少只鸡!实现鸡鸡自由!咳咳!回归正题,那我们就把固定的数量金钱转为相应的money和much变量,通过由用户输入相应的数就能达到各种方式的解和方式总数!