百钱买百鸡c语言代码 百钱买百鸡c语言代码心得
百鸡百钱问题 c语言 递归解决 一定是递归!不要用循环!
#include
百钱买百鸡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); }} } #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); }} }} #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 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语言程序: #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 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 #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)) 试试你就知道了 #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); }} } 百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只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); }} }C语言:百钱百鸡问题
C语言中百钱百鸡的程序
c语言程序设计 100元买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只,该怎么买???
C语言 百钱买百鸡
c语言 3、百钱买鸡:鸡翁一钱值五,鸡母一值钱三鸡雏三值钱一。百钱买百鸡。请设计算法,写出程序并输出结
百鸡问题怎么用C语言求解
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。