【问题】百钱百鸡:公鸡一只五块钱,母鸡一只三块钱,小鸡三只一块钱,问:用一百块钱买一百只鸡,公鸡,母鸡,小鸡各几只?
分析:程序员
初步设想公鸡、母鸡、小鸡的数量分别为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;
}程序
▲以上程序也能够获得正确答案,而且只有一层循环,程序效率明显提升了。可是,特别是初学者,看着以上程序能简单地弄懂其算法吗??计算机