1.1 百钱百鸡问题

发布时间 2023-04-14 19:47:17作者: 自律小子丶

问题描述:我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

第一部曲:已知买鸡所用钱的总数,还有买的鸡的总个数,让求公鸡母鸡小鸡的个数,这里面有三个未知数,但是只能根据买鸡用的钱,还有买鸡的个数列出两个方程,不能通过解方程解出公鸡母鸡和小鸡的个数。计算机的计算能力很强,可以通过枚举公鸡、母鸡、小鸡的个数所有情况,判断是否满足条件,如果满足就输出,不满足继续循环。利用枚举和循环来进行逐个判断。通过题目的条件可以判断公鸡最多20只,母鸡最多33只。

第二部曲:流程图

 

 

 第三部曲:伪代码

int cock=0,hen=0,chicken=0;

for(cock=0;cock<=20;cock++)

{

for(hen=0;hen<=33;hen++)

{

for(chicken=0;chicken<=100;chicken++)

//或者在此处利用个数之和为100,求出chicken,进行判断

{

if(5*cock+3*hen+chicken/3.0==0)

//输出

}

}

}

第四部曲:代码

#include<iostream>
using namespace std;
int main()
{
int cock=0,hen=0,chicken=0;
for(cock=0;cock<=20;cock++)
{
for(hen=0;hen<=33;hen++)
{

for(chicken=0;chicken<=100;chicken++)
{

if(cock+hen+chicken==100&&5*cock+3*hen+chicken/3.0==100)//注意使用3.0,预防整数除法导致错误的问题
cout<<cock<<" "<<hen<<" "<<chicken<<endl;

}

}
}
return 0;
}

 

 

优化后的代码

#include<iostream>
using namespace std;
int main()
{
int cock=0,hen=0,chicken=0;
for(cock=0;cock<=20;cock++)
{
for(hen=0;hen<=33;hen++)
{
chicken=100-cock-hen;
if(5*cock+3*hen+chicken/3.0==100)
cout<<cock<<" "<<hen<<" "<<chicken<<endl;
}
}
return 0;
}