百鸡百钱问题 c语言 递归解决 一定是递归!不要用循环!

#include

百钱买百鸡c语言代码 百钱买百鸡c语言代码心得百钱买百鸡c语言代码 百钱买百鸡c语言代码心得


百钱买百鸡c语言代码 百钱买百鸡c语言代码心得


百钱买百鸡c语言代码 百钱买百鸡c语言代码心得


#include

void calc(int a, int b)

{if(a>=20 || b>=33) return;

int c=100-a-b;

if(c%3==0 && c/3+5a+3b == 100)

{printf("%d %d %d

",a, b, c);

exit(0);

}calc(a+1, b);

calc(a,b+1);

}int main()

{calc(1,1);

return 0;

}

#include

#include

#include

using namespace std;

const int CHICK_KIND = 3;

const int TOTAL_MONEY=300;

const int TOTAL_COUNT=100;

int prArray[CHICK_KIND]={15,9,1};

int resultArray[CHICK_KIND]={0,0,0};

void calculate(int remain_money,int index);

int main(int argc,char argv)

{calculate(TOTAL_MONEY,0);

return 0;

}void calculate(int remain_money,int index)

{int time=remain_money/prArray[index];

for(int i=0;i<=time;i++)

{resultArray[index]=i;

if(index==CHICK_KIND-1)

{if(resultArray[0]+resultArray[1]+resultArray[2]==TOTAL_COUNT&&resultArray[0]>0&&resultArray[1]>0&&resultArray[2]>0)

if(resultArray[0]prArray[0]+resultArray[1]prArray[1]+resultArray[2]prArray[2]==TOTAL_MONEY)

cout<<"("<

}else

{int remainMoney=remain_money;

remainMoney=remainMoney-prArray[index]resultArray[index];

calculate(remainMoney,index+1);

}}

}

C语言:百钱百鸡问题

#include

void main(){

int cockNum; //定义公鸡的数量,也就是鸡翁的数量

int henNum; //定义母鸡的数量,也就是鸡母的数量

int chickenNum; //定义小鸡的数量,也就是雏鸡的数量

int count = 0; //定义输出结果的编号

//公鸡100文钱能买100 / 5 = 20只

for (cockNum = 0; cockNum <= 20; cockNum++) {

//母鸡100文钱 能买100 / 3 = 33只,还多1文

for (henNum = 0; henNum <= 33; henNum++) {

//三种鸡的只数总和是100只,故只要确定公鸡和母鸡的只数,就能确定小鸡的只数

chickenNum = 100 - cockNum - henNum;

//三种鸡的总价格是100文,故以此为条件分别输出所有鸡的只数

if (5 cockNum + 3 henNum + chickenNum / 3.0 == 100) {

count++; //输出结果的编号自增

printf("%d.公鸡的数量是:%d只,母鸡的数量是:%d只,小鸡的数量是:%d只。n",count,cockNum,henNum,chickenNum);

}}

}}

C语言中百钱百鸡的程序

#include

int main(void)

{int x,y,z;

printf("百钱买百鸡n");

for(x = 0;x <= 20;x ++)

{for(y = 0;y <= 33;y ++)

{z = 100 - x - y;

if(300 == 15 x + 9 y + z )

printf("公鸡:%2d,母鸡:%2d,小鸡:%2dn",x,y,z);

}}

return 0;

}

书上的例题,给你原文搬过来main(){ int x,y,z;for(x=1;x<20;x++)for(y=1;y<=33;y++) for(z=1;z<=100-x-y;z++){ if((5x+3y+z/3.0)==100.0;)printf("nclock:%d,hen:%d,chick:%d",x,y,z);}}

鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。

则设鸡翁有x只.

母鸡有y只.

鸡雏有z只.

则5x+3y+z/3要等于100.所以程序为:#include

int

main()

{int

x,y,z;

x=1;

y=1;

while(x<20&&y<33)

{z=100-x-y;

if(5x+3y+z/3==100)

//满足5x+3x+z/3=100.就输出

printf("鸡翁%d

母鸡%d

鸡雏%dn",x,y,z);

++y;

if(y>=100/3){y=1;++x;}

}return

0;

}附图:

c语言程序设计 100元买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只,该怎么买???

使用穷举法。

C语言程序:

#include

运行结果:

说我的想法,代码自己写……

1、简单粗爆的,直接3个FOR循环,变量(如a,b,c)代表三种鸡各自的数量,然后再判断结果(?5a+3b+c/3=100,如果是就打印出来。这样的话至少要循环1百万次。

2、也可以加点简单的判断,在循环之前,找出变量的范围。

5元一只的,只要大于20,3元的大于33只就没有意义了,而小鸡的数量,则必需为3的倍数

也就是相对减少了循环的次数。

3、或者,用两个FOR 循环,因为确定了两种鸡的数量,第三种也就确定了,这个时候再判断 是不是100元。再加上第二点减少了变量的范围,效率是更高一点。

#include "iostream.h"

void main()

{int chicken,hen,cock;

cout<<"chicken,hen,cock number= ";

cout<

for(chicken=0;chicken<=99;chicken+=3)

for(hen=0;hen<=33;hen++)

for(cock=0;cock<=20;cock++)

if(chicken/3+3hen+5cock==100)

if(chicken+hen+cock==100)

{cout<<" chicken="<

cout<<"hen:"<

cout<<"chicken:"<

}}

}

void main()

{unsigned char x, y, z;

for(x = 0; x <= 100; x++)

{for(y = 0; y <= 100; y++)

{for(z = 0; z <= 100; z+=3)

{if(((x+y+(3z)) == 100) && (((5x) + (3y) + z)) == 100)

{printf("可以购买公鸡%d只,母鸡%d只,小鸡%d只。

", x, y, 3z);

}}

}}

}

#include

int a[3] = {0};

int same(int b) {

int flag = 0;

if(a[0] == b[0]) ++flag;

if(a[1] == b[1]) ++flag;

if(a[2] == b[2]) ++flag;

a[0] = b[0];

a[1] = b[1];

a[2] = b[2];

return flag;

}int main() {

int jg,jm,jz,res;

int cnt = 0,plan[3];

for(jg = 0; jg <= 100/5; ++jg) {

for(jm = 0; jm <= 100/3; ++jm) {

for(jz = 0; jz <= 3100; ++jz) {

if(5jg + 3jm + jz/3.0 == 100) {

plan[0] = jg;

plan[1] = jm;

plan[2] = jz;

res = same(plan);

if(res < 3) {

++cnt;

//printf("%d : 公鸡:%d,母鸡:%d,小鸡:%d

",cnt,jg,jm,jz);

}}

}}

}printf("共有方案%d种。

",cnt);

return 0;

}

#include "stdio.h" int main() { int all; for(int i=0;i<20;i++) for(int j=0;j<30;j++) { all=100-i-j; if(all%3==0) { all/=3; if(5i+3j+all==100) printf("%d,%d,%dn",i,j,all3); } } getchar(); return 0; }

5x+3y+z/3=100

x+y+z=100

C语言 百钱买百鸡

1.a,b的初始值不能定义为0,应该定义为1。

2.a,b,b的具体意思应该明确:a:公鸡的个数;b:母鸡的个数;c:小鸡的个数。

3.一定要注意小鸡是一元三只,所以小鸡的个数c只能是3的整数倍,即c+=3。

4.#include

void main()

{int a,b,c;

for(a=1;a<20;a++)

{for(b=1;b<33;b++)

{for(c=3;c<100;c+=3)

{if((a+b+c==100)&&(a5+b3+c/3==100))

printf("a=%d,b=%d,c=%d",a,b,c);

}}

}}

希望可以帮到你哦!

#include

算法以及书写上,似乎都有点小问题

如果“大公鸡5文钱一只,大母鸡3文钱一只,小鸡一文钱买三只”,且

a,b,c分别表示大公鸡,大母鸡,小鸡,那么......

if(5.0a+3.0b+c/3.0=100.0)

对于这一句,是有问题的:

1,像楼上说的,就是“=”与"=="问题,应该是“==”。

2,"5.0a+3.0b+c/3.0==100.0"中,设

x=c/3

,那么你能保证

3x==c

吗???

显然,是不能的,也就是说,小鸡的数目不一定是3的倍数。而根据题目,显然有c是3的倍数。这个问题用整除c%3==0来实现。

因此,正确的表示应该是:if(c%3==0&&(5.0a+3.0b+c/3.0==100.0))

这样,就没什么问题了。

这个程序如果在VC中肯定通不过编译,首先#include "stdio.h" 有些不妥,写成#include 第二Void main()写成int main(void)第三在程序的应该加上return 0

#include "stdio.h"

void main()

{int a,b,c;

for (a=0;a<21;a++)

{for(b=0;b<34;b++)

{c=100-a-b;

if ((c%3==0)&&(5a+3b+c/3==100))

printf ("a=%d,b=%d,c=%dn",a,b,c);}

}}

程序没有错误,但因为这种情况确实不存在,所以输不出来。

不信的话,把if ((c%3==0)&&(a+b+c==100))

改成if ((c%3==0)||(a+b+c==100))

试试你就知道了

c语言 3、百钱买鸡:鸡翁一钱值五,鸡母一值钱三鸡雏三值钱一。百钱买百鸡。请设计算法,写出程序并输出结

#include

#define money number1 / 5 + number2 3 + number3 / 3

void main()

{int number1; //鸡翁的数目

int number2; //母鸡的数目

int number3; //鸡雏的数目

int sumnumber;

for(number1 = 0 ; number1 <= 100 ; number1 += 5)

for(number2 = 0; number2 <=34 ; number2++)

for(number3 = 0; number3 <= 100 ; number3 += 3)

{sumnumber = number1 + number2 + number3;

if(sumnumber == 100)

if(money == 100)

{printf("n");

printf("find!n");

printf("鸡翁的数目是:%dn" , number1);

printf("母鸡的数目是:%dn" , number2);

printf("鸡雏的数目是:%dn" , number3);

}}

}

百鸡问题怎么用C语言求解

百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。

这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:

这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z的取值范围:

1) x的取值范围为1~20

2) y的取值范围为1~33

3) z的取值范围为3~99,步长为3

对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,得到问题的解。

数据要求

问题中的常量:

无问题的输入:

无问题的输出:

int x,y,z /公鸡、母鸡、小鸡的只数/

初始算法

1.初始化为1;

2.计算x循环,找到公鸡的只数;

3.计算y循环,找到母鸡的只数;

4.计算z循环,找到小鸡的只数;

5.结束,程序输出结果后退出。

算法细化

算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了。

步骤2和3是按照步长1去寻找公鸡和母鸡的个数。

步骤4的细化

4.1 z=1

4.2 是否满足百钱,百鸡

4.2.1 满足,输出终百钱买到的百鸡的结果

4.2.2 不满足,不做处理

4.3 变量增加,这里注意步长为3

流程图

图5-8 程序执行流程图

程序代码如下

#include "stdio.h"

main()

{int x,y,z;

for(x=1;x<=20;x++)

for(y=1;y<=33;y++)

for(z=3;z<=99;z+=3)

{if((5x+3y+z/3==100)&&(x+y+z==100))/是否满足百钱和百鸡的条件/ printf("cock=%d,hen=%d,chicken=%dn",x,y,z);

}}

分析

程序运行结果如下:

cock=4,hen=8,chicken=78

cock=8,hen=11,chicken=81

cock=12,hen=4,chicken=84

对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了,即 。请同学们自己分析二重循环和三重循环的运行次数,做为练习自己调试这一方法。

#include

void main()

{int a =5, b=2 ,c; //a是公鸡5元每只,b是母鸡2元每只,c用来控制小鸡0.5元每只

for(a=1 ; a<100/5; a++)

for(b=1 ; b <(100-a5) / 2 ; b++)

{ c =100 -a - b;

if(a5 + b 2 + c 0.5 ==100)

{ printf("公鸡:%d只,母鸡%d只,小鸡%d只",a,b,c);

}}

}