百鸡问题以及借书方案知多少
百钱百鸡问题
一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只
根据数学知识可以转化为方程组:
解题思路:根据鸡的数量不超过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;
}
该题体会:根据题干所要求的输出方式及时调整自己输出格式,多层循环嵌套中,如果内层的取值与外层的有关,可以先判断外层的取值,如果内层取值因为外层取值而不需要考虑,可以提高效率。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具