百钱百鸡问题
一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只
根据数学知识可以转化为方程组:
解题思路:根据鸡的数量不超过100只以及总价格不超过100,可以得出:公鸡数量为0-20,母鸡数量为0-33,小鸡数量为0-100。运用for循环嵌套实现公鸡,母鸡,小鸡分别取值后判断是否符合题干要求,符合则输出,不符合则继续执行循环(考虑小鸡chicken/3时为整数,要除以3.0以保证数据的准确)
代码实现:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int cock,hen,chicken;
for(cock=0;cock<21;cock++)\\公鸡取值为0-20
{
for(hen=0;hen<34;hen++)\\母鸡取值为0-33
{
for(chicken=0;chicken<101;chicken++)小鸡取值为0-100
{
if((cock+hen+chicken==100)&&(5*cock+3*hen+chicken/3.0==100)) \\判断是否符合题意中所得到的条件
cout<<"cock="<<setw(2)<<cock<<",hen="<<setw(2)<<hen<<",chicken="<<setw(2)<<chicken<<endl; \\符合条件后输出所需要的各个数量
}
}
}
return 0;
}
拓展:上面方法循环嵌套三次,而chicken可以用hen和cock表示,减少一次循环,大大增加了计算机的效率
代码实现:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int cock,hen,chicken;
for(cock=0;cock<21;cock++)\\公鸡取值0-20
{
for(hen=0;hen<34;hen++)\\母鸡取值0-33
{
chicken=100-cock-hen;\\减少一次循环,用公鸡和母鸡表示,增加效率
if(5*cock+3*hen+chicken/3.0==100)\\条件判断
cout<<"cock="<<setw(2)<<cock<<",hen="<<setw(2)<<hen<<",chicken="<<setw(2)<<chicken<<endl;\\符合条件则输出结果
}
}
return 0;
}
该题体会:阅读完题目分析所需的变量以及变量所需要取的值,根据题干列出能想到的条件的简便表达形式,方便思考。再画出流程图,根据流程图写出代码。
借书方案知多少:
小明有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
解题思路:将五本书编号为1、2、3、4、5,每人只能借1本,则每人借到的书在该种借法中是无法重复的。只需先定义一个整形变量存储借法种数,三次循环结构嵌套后,条件判断三人所借的书是否相同,均不同则输出并且借法种数加一,相同则继续执行循环。
代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n=0;
int h=0;
int i,j,k;
for(i=1;i<6;i++)\\依次选出A的书
{
for(j=1;j<6;j++)\\依次选出B的书
{
for(k=1;k<6;k++)\\依次选出C的书
{
if(i!=j&&i!=k&&j!=k)\\条件判断
{
n++;\\记录有效借阅方法的种数
cout<<"A: "<<i<<" B: "<<j<<" C: "<<k;
if(h==0||h==1)\\按照规定的格式输出
{
h++;
cout<<" ";
}
else
{
h=0;
cout<<endl;
}
}
}
}
}
cout<<"共有"<<n<<"种有效借阅方法"<<endl;
return 0;
}
拓展:
当A与B借的书相同时,C不管借的是什么书都不符合有效借阅方法,所以可以在C的循环当中加入判断条件,A借的书与B借的书不同,如果相同则不进行该次C的循环,可以提高效率
代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n=0;
int h=0;
int i,j,k;
for(i=1;i<6;i++)\\依次选出A的书
{
for(j=1;j<6;j++)\\依次选出B的书
{
for(k=1;k<6&&i!=j;k++)\\依次选出C的书,同时判断A,B书是否相同
{
if(i!=k&&j!=k)\\条件判断
{
n++;\\记录有效借阅方法的种数
cout<<"A: "<<i<<" B: "<<j<<" C: "<<k;\\按照规定输出结果
if(h==0||h==1||h==2)
{
h++;
cout<<" ";
}
else
{
h=0;
cout<<endl;
}
}
}
}
}
cout<<"共有"<<n<<"种有效借阅方法"<<endl;
return 0;
}
该题体会:根据题干所要求的输出方式及时调整自己输出格式,多层循环嵌套中,如果内层的取值与外层的有关,可以先判断外层的取值,如果内层取值因为外层取值而不需要考虑,可以提高效率。
标签:cout,int,知多少,借书,百鸡,hen,include,cock,chicken From: https://www.cnblogs.com/zljzy/p/17304192.html