1 解决“牛吃草”问题
1.1 学习目标
1. 理解计算机是用来计算的机器。
2. 利用C++语言编程解决简单问题。
1.2 情境导入
数学课上,老师布置了“牛吃草”问题:有一个牧场,牧场上的牧草每天都在匀速生长。这片牧场可以供21头牛吃8天或24头牛吃6天,那么可以供18头牛吃几天?
艾罗:小明,你知道如何计算吗?
小明:这还不简单,用总草量除以18头牛每天吃的草量就可以了。
艾罗:这样算可不对哦,因为草每天都在生长呀!
小明:那应该怎么计算呢?
艾罗:下面我们就来看看如何求解“牛吃草”问题。
这道数学题,我们可以人工计算求出结果。但如果题目中所给条件改变了,我们还要按照人工计算的方法重新计算,那么有没有其他可以解决此类问题的方法呢?
1.3 知识讲解
求解过程实际上就是计算。计算是生活中非常重要的事情,如果我们没有计算能力,买东西就不知道价钱,做事情也不知道需要多少时间,生活就会变得混乱。更重要的是,如果离开了计算,我们无法建造房屋、制造机器,人类社会就不能如此快速地发展。
很早以前,人们使用手指进行计算,但手指能够表示的数有限,于是人们发明了算筹、算盘等辅助计算的工具,但这些工具存在运算速度慢、运算位数少等缺陷。直到计算机出现才彻底改变了人们的计算方式。那么计算机如何理解我们的需求,又如何将计算的结果反馈给我们呢?这就是今天我们要学习的编程。
编程是指模拟计算机的思考方式,用计算机可以理解的语言(编程语言)给出指令,从而完成程序设计。但是,在教会计算机思考之前,我们首先要理解计算机是如何思考的,才能用计算机可以听懂的语言进行沟通。
1.4 实践任务
“牛吃草问题”的难点在于草每天都在生长,草的数量在不断变化。解决这类问题的关键是抓住“一变”和“两不变”,即草的总量发生变化,而每天草的新增数量和原有草的数量不变。
在“牛吃草问题”中,我们通常假设“草每天匀速生长,1头牛每天吃1份草”。同时,我们要清楚:每个单位时间内,“每天草的新增数量”是多少、“原有的草量”是多少。如果求时间,则把“牛”的数量分成两份,一份吃“原有的草量”,另一份吃“每天匀速生长出的草”。
【问题描述】有一个牧场,牧场上的牧草每天都在均匀生长。这片牧场可以供21头牛吃8天或24头牛吃6天,那么在牧场上放18头牛可以供它们吃多少天?
【输出】可供18头牛吃草的天数t。
“牛吃草问题”的参考程序如下。
#include <iostream>
using namespace std;
int main ()
{
int s1,s2,s3,s4,t;
s1=21*8;
s2=24*6;
s3=(s1-s2)/(8-6); //每天新增的草量可供多少头牛吃
s4=21*8-s3*8; //原有的草量
t=s4/(18-s3); //可供牛吃的天数
cout<<"t:"<<t<<endl;
system("pause");
return 0;
}
程序的运行结果如图1-1所示。
图1-1 “牛吃草问题”程序的运行结果
1.5 思维拓展
【问题描述】这片牧场可以供cow1头牛吃day1天或cow2头牛吃day2天,求这片牧场可以供cow3头牛吃的天数day3。修改“实践任务”中的程序,实现用键盘输入条件求解“牛吃草”问题。
【输入】牛数cow1和天数day1、牛数cow2和天数day2以及需要求解的牛数cow3。
【输出】牛吃草的天数day3。
输入条件解决“牛吃草”问题的参考程序如下。
#include <iostream>
using namespace std;
int main ()
{
int cow1,cow2,cow3,day1,day2,day3;
long s1,s2,s3,s4,t;
cout<<"cow1:";
cin>>cow1;
cout<<"day1:";
cin>>day1;
cout<<"cow2:";
cin>>cow2;
cout<<"day2:";
cin>>day2;
cout<<"cow3:";
cin>>cow3;
s1=cow1*day1;
s2=cow2*day2;
s3=(s1-s2)/(day1-day2); //每天新增草量可供多少头牛吃
s4=cow1*day1-s3*day1; //原有草量
day3=s4/(cow3-s3);
cout<<"day3:"<<day3<<endl;
return 0;
}
按照原来的题目输入cow1、day1、cow2、day2、cow3,程序运行结果如图1-2所示。
图1-2 输入条件解决“牛吃草”问题程序的运行结果
1.6 巩固练习
1. 运行下列程序后,变量s的值是( )。
#include<iostream>
using namespace std;
int main()
{
int s,i,m,n;
i=1;
m=1;
n=1;
while(i<=5)
{
s=m+n;
m=n;
n=s;
i=i+1;
}
cout<<"s:"<<s<<endl;
system("pause");
return 0;
}
A.2
B.8
C.13
D.21
2. 某游乐场在营业前有400名游客排队。营业后,每分钟来的人数是固定的。一个入口每分钟可以进10名游客,开4个入口,20分钟后所有游客就可以全部入场。如果现在开6个入口,所有游客入场完毕需要多长时间?请编程实现。
1.7 自我评价