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++;
}
}

*总是的进一步讨论这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑

⑵ c语言解决百钱买鸡问题

chicks小鸡,cocks公鸡,hens

n是钱,因为1钱可买3小鸡,所以小鸡数对应钱数就是:chicks=3*n

外层遍历:内买小鸡的钱,从0遍历到33(容33块就99个小鸡了,明显用不了这么多,但作者为了保险吧)
内层遍历:买母鸡的个数,从0遍历到33个(33个母鸡也99块,与上面意图相同,尽量遍历到境界点,虽然有点不科学,但如果问题有解,在条件成立时加个跳出,也不碍事)

内层遍历的时候:cocks=100-hens-chicks; 公鸡=100-母鸡-小鸡,(确保三种鸡加起来是100)

if(5*cocks+3*hens+n==100&&cocks>=0) 意思是:所有的钱加起来是100并且公鸡个数不为负数

printf("%d %d %d\n",cocks,hens,chicks); //打完收工
hens++;//自增
}
n++;//自增

⑶ 各位大虾,百钱买百鸡用C语言怎么做

鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
#include <stdio.h>
int main()
{
int m,w,c; //m代表鸡翁,w代表鸡母,c代表鸡雏
for(m=1;m<=20;m++)
{
for(w=1;w<=40;w++)
{
for(c=1;c<=100;c++)
if((5.0*m+3.0*w+c/3.0==100.0)&&(m+w+c==100))
printf("鸡翁有%d只,鸡母有%d只,鸡雏有%d只\n",m,w,c);

}
}
return 0;
}

⑷ C语言问题卖鸡程序

t记录可用的i
j
k
组合

if(5*i+j*3+k*3==N)

这是可用的条件

循环条件中i*5<=N
是因为i最多只能到
N/5即
5块钱的鸡只能买100/5个

⑸ c语言n钱买n鸡问题

先把我改过的代码贴给你:

#include<stdio.h>
constintWeng=15;
constintMu=9;
constintChu=1;
intmain()
{
intiGold,iWeng,iMu,iChu,iFangAn=0,t=0;
scanf("%d",&iGold);
for(iChu=3;iChu<=iGold-1;iChu+=3){
for(iMu=1;iMu<=iGold-iChu-1;iMu++){
iWeng=iGold-iChu-iMu;
if(iGold*3==iWeng*Weng+iMu*Mu+iChu*Chu)
iFangAn++;
}
}
printf("%d",iFangAn);
return0;
}

你的问题在于那个判断语句。总金、鸡翁价、鸡母价都应是原价的3倍。

至于循环,我改成了雏鸡3倍递增,因为这个题目不存在浮点数,其他的问题都不大。

⑹ C语言买鸡问题

scanf("%d %d\n",&a,&b); 改成 scanf("%d %d",&a,&b); 就不需要多输那个0了

⑺ c程序,买鸡问题

程序运行结果没有问题,是不是因为在运行过程中chick出现负数的原因回啊,将
for (cock = 0; cock <= n; cock++)
{
for (hen = 0; hen <= n; hen++)
改为
for (cock = 0; cock <= n/5; cock++)
{
for (hen = 0; hen <= n/3; hen++)
试试。答

⑻ C语言 百钱买百鸡

*********************
算法以及书写上,似乎都有点小问题
*********************
如果“大公鸡5文钱一只,大母鸡3文钱一只,小鸡版一文钱买三只”权,且
a,b,c分别表示大公鸡,大母鸡,小鸡,那么......
if(5.0*a+3.0*b+c/3.0=100.0)
对于这一句,是有问题的:
1,像楼上说的,就是“=”与"=="问题,应该是“==”。
2,"5.0*a+3.0*b+c/3.0==100.0"中,设
x=c/3
,那么你能保证
3*x==c
吗???
显然,是不能的,也就是说,小鸡的数目不一定是3的倍数。而根据题目,显然有c是3的倍数。这个问题用整除c%3==0来实现。
因此,正确的表示应该是:if(c%3==0&&(5.0*a+3.0*b+c/3.0==100.0))
这样,就没什么问题了。

⑼ c语言100元买100只鸡

main()
{
int i,j,k
for(i=1;i<=20;i++)
{
for (j=1;j<=33;j++)
{
for(k=1;k<=100;k++)
{
i+k+j=100
5*i+3*k+k=100}
}
}