经典问题:
一只公鸡价值五钱,一只母鸡价值三钱,三只小鸡价值一钱,问:用100钱可以买公鸡,母鸡,小鸡各几只?
问题分析
设可以买公鸡i只,母鸡j只,小鸡k只
根据题意可以得出有三个变量,且三个变量之间的关系是
5*i+3*j+k/3==100
i+j+k==100
由于C语言的条件,当k为整数时,k/3所得值也为整数,例如当k=5时,需要花费至多1.7元,但是计算机算出只需要1元,出现了错误,在结合实际要求,k必须为可以被三整除的整数。
隐藏条件
k%3==0;
进一步根据题意确定变量的范围:
i∈[0,20];
j∈[0,33]
k∈[0,100];
确定范围之后,三个变量三个范围,三层嵌套循环,为了进行优化,可以减少循环次数,
k=100-i-k;
根据分析写出如下代码,解决问题:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0,j=0,k=0; //定义公鸡数量i,母鸡数量j,小鸡数量k
for(i=0;i<=20;i++)
{
for(j=0;j<=33;j++)
{
k=100-i-j;
if(5*i+3*j+k/3==100&&i+j+k==100&&k%3==0)
{
printf("公鸡%d只,母鸡%d只,小鸡%d只\n",i,j,k);
}
}
}
return 0;
}
总结
①根据题意设出变量
②写出变量之间的限制条件和范围
③优化,想办法减少循环次数和嵌套循环的个数