百元买鸡问题 穷举法 c++
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
穷举法
“穷举法”也称“枚举法”,即将可能出现的各种情况一一测试,判断是否满足条件,采用循环语句可方便实现。
百元买鸡问题。
假定小鸡每只5角,公鸡每只2元,母鸡每只5元。
现在有100块钱,要求买100只鸡,编程列出所有可能的购鸡方案。
分析:设母鸡、公鸡、小鸡分别为x、y、z只,根据题目要求列出方程为:
其中包括3个未知数,2个方程,此题有若干个解。
可用如下两种方法实现。
方法一:用三重循环来解决。
#include”iostream.h”
#include”iomanip.h”
void main()
{
Int x,y,z;
Long k(0);
Cout <<”x y z”<<endl;
For(x=0;x<100;x++)
For(y=0;y<100;y++)
For(z=0;z<100;z++)
{
K++;
If(((3*x+2*y+0.5z)==100)&&((x+y+z==100)))
Cout<<setw(9)<<x<<setw(9)<<y<<setw(9)<<z<<endl;
}
Cout<<”方法一内执行了”<<k<<”次”<<endl;
}
方法二:用两重循环来解决,相应程序段如下:
Cout <<”x y z”<<endl;
For(x=0;x<=33;x++)
For(y=0;y<=50;y++)
{
K++;
z=100-x-y;
if((3*x+2*y+0.5z)==100)
cout<<setw(9)<<x<<setw(9)<<y<<setw(9)<<z<<endl;
}
Cout<<”方法二内循环执行了”<<k<<”次”<<endl;
方法一利用三重循环表示三种鸡的只数,考虑了所有购鸡的情况,故共执行了1000000次循环;方法二进行了循环的优化,根据三种鸡共100只的关系,用二重循环实现;同时没种鸡的循环次数不必到100,因为还要满足价格100元得问题,故共执行了1734次循环。
因此,在多重循环中,为了提高运行速度,对程序要考虑优化,有关注意事项如下:
1.尽量利用已给出的条件,减少重循环的重数。
2.合理地选择内、外层的循环次数,即将循环次数多的放在内循环。