- 人工智能編程實踐:C++編程5級
- 陳杰編著
- 1197字
- 2025-02-08 18:08:00
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 自我評價
