百元买百鸡循环c语言编程,C语言:初学者3--百钱百鸡:普通-优化-超级版(循环嵌套)三大方法实现!...

【问题】百钱百鸡:公鸡一只五块钱,母鸡一只三块钱,小鸡三只一块钱,问:用一百块钱买一百只鸡,公鸡,母鸡,小鸡各几只?

分析:程序员

初步设想公鸡、母鸡、小鸡的数量分别为x、y、z.因所买3种鸡的数量为100只,可使用三重循环从1到100分别试算。不使用其余算法分析,可直接编写程序,一类鸡的数量均可以从 0到100再判断鸡的总数和用钱的总数是否等于100,若100,则找到一个答案:不然继续变化各种鸡的数量,从新试算。算法

【普通版】百钱百鸡!!!

include

int main()

{

int x,y,z;

for(x=0;x<=100;x++)                                     /*循环前,令x=0,当x<=100时进行循环,每轮循环结束x的值加1*/

{

for (y=0;y<=100;y++)                           /*循环前,令y=0,当y

{

for (z=0;z<=100;z++)              /*循环前,令z=0,当z<=100时进行循环,每轮循环结束z的值加1*/

{

/*条件判断x+y+x 表示3种鸡的总数,x*5+y*3+z/3表示购买3种鸡所花的钱,若是都为100,则知足条件*/

if (z%3==0 && x+y+z==100 &&x*5+y*3+z/3==100)

printf("公鸡: %d,母鸡: %d,小鸡: %d\n",x,y,z);                        /*输出x,y,z 的值*/

}

}

}

getch();优化

return 0;

}spa

运行结果:

公鸡:0,小鸡:  25,母鸡:  75

公鸡:4,小鸡:  18,母鸡:  78

公鸡:8,小鸡:  11,母鸡:  81

公鸡:12,小鸡:  4,母鸡:  84get

思考:

公鸡单价为5块钱,则100钱最多只能买20 只:母鸡单价为了3钱,100钱最多只能买33只。

另外,鸡的总数为100,则在试算过程当中,只要公鸡和母鸡数肯定了,小鸡数直接100-x-y便可获得,不须要再使用第三层循环来处理了。io

【优化版】百钱百鸡!!!

#include

int main()

{

int x,y,z;

for(x=0;x<=20;x++)                                                   /*循环前,令x=0,当x<=20时进行循环,每轮循环结束x的值加1*/

{

for(y=0;y<=33;y++)                                            /*循环前, 令y=0,当y

{

z=100-x-y;                                                    /*z的数量即为100减去其余两种鸡的数量*/

if (z%3==0 && x*5+y*3+z/3==100)             /* 条件判断*/

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

}

getch();

return 0;

}效率

由以上两个程序的比较可知,在循环嵌套中,尽可能减小嵌套的层数,可提升程序效率。可是,因为如今计算机的运行速度愈来愈快,程序员也应注意不要过分追求程序效串,而使程序很难读懂。

例如,将程序改写为下面的形式:循环

【超级版】百钱百鸡!!!

include

int main()

{

int x,y,z;

for(x=0; x

{

y=25-(x/4)*7;

z=100-x-y;

printf("公鸡:%d,母鸡: %d,小鸡1:%d\n",x, y, z);

}

getch();

return 0;

}程序

▲以上程序也能够获得正确答案,而且只有一层循环,程序效率明显提升了。可是,特别是初学者,看着以上程序能简单地弄懂其算法吗??计算机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值