c语言买百鸡
⑴ 百鸡百钱问题 c语言 递归解决 一定是递归!不要用循环!
为方便计算,把小鸡的价格定义为1,母鸡价格为9,公鸡15,这样可以把问题当作300钱买100鸡了:
#include<stdio.h>
intprice[3]={15,9,1};
intchicknum[3];
voidbuychick(intcurmoney,intci)
{
intmax,i;
max=curmoney/price[ci];
for(i=1;i<=max;++i)
{
chicknum[ci]=i;
if(2==ci)
{
if(100==chicknum[0]+chicknum[1]+chicknum[2])
if(300==chicknum[0]*price[0]+chicknum[1]*price[1]+chicknum[2]*price[2])
printf("公鸡:%4d母鸡:%4d小鸡:%4d
",chicknum[0],chicknum[1],chicknum[2]);
}
else
buychick(curmoney-chicknum[ci]*price[ci],ci+1);
}
}
intmain()
{
buychick(300,0);
return0;
}
⑵ C语言“百钱百鸡”,用100块买100只鸡,公鸡3元1只,母鸡5元1只,小鸡1元3只。代码我已经打好了。
#include<stdio.h>
voidmain()
{
intcock=0; //公鸡的数量公鸡3元一只
inthen=0; //母鸡的数量 母鸡5元一只
intchick=0; //小鸡的数量 小鸡1元三只
for(cock=0;cock<=33;cock++)//100块最多买33只公鸡
{
for(hen=0;hen<=20;hen++) //100块最多买20只母鸡
{
for(chick=0;chick<=300;chick+=3) //100块最多买300只小鸡小鸡一定是3的倍数才可以
{
if(3*cock+5*hen+chick/3==100)//100块买100只鸡1/3结果是0,这里应该用chick/3
{
printf("公鸡的数量为:%d ",cock);
printf("母鸡的数量为:%d ",hen);
printf("小鸡的数量为:%d ",chick);
}
}
}
}
}
⑶ C语言(百钱买百鸡的问题)
百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了着名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*题目分析与算法设计设鸡翁、鸡母、鸡雏的个数分别为cocks(x),hens(y),chicks(z),题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然cocks的值在0~20之间;
同理,hens的取值范围在0~33之间,可得到下面的不定方程: 5x+3y+z/3=100 x+y+z=100 所以此问题可归结为求这个不定方程的整数解。由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
程序解释
main()
{
int cocks=0,hens,chicks;
while (cocks<=19) //公鸡只数小于19
{hens=0;
while(hens<=33) //母鸡小于33只
{chicks=100-cocks-hens;
if (5.0*cocks+3.0*hens+chicks/3.0==100.0)
printf("%d %d %d\n",cocks,hens,chicks);
hens++;
}
cocks++;
}
}
*总是的进一步讨论这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑