買礦泉水,空瓶,瓶蓋,再兌換礦泉水類問題

瘋狂的函數 2022-01-07 20:37:42 阅读数:366

泉水 空瓶 泉水

聽到這個,是否有些感觸?是否見過這一類的題目?

實際上這種題,並不困難......

看個例題叭:

你有十塊錢,礦泉水兩塊錢一瓶,四個瓶蓋換一瓶,兩個空瓶換一瓶,你能買多少瓶礦泉水?

沒錯,短短幾句話,實則一道深奧的數學題

這道題有許多解法,“通往羅馬的路不止一條”

方程實現:

我們可以通過數學方程來解决這道題:

設使用空瓶兌換到的瓶數為X(整數)

設使用空瓶兌換到的瓶數為Y(整數)

則總瓶數為5+X+Y

可列出二元一次不等式組:

1、 設Y=1,由公式2求出則X={0,1},將X,Y帶入公式1,不符合(舍去)

2、 設Y=2,由公式2求出則X={1,2,3,4},將X,Y帶入公式1,不符合(舍去)

3、 設Y=3,由公式2求出則X={4,5,6,7},將X,Y帶入公式1,求解X=7

所以一共喝了5+X+Y=5+3+7=15(瓶)

看,解决了!!!

但是......若是給你很多錢,或者直接給你原來有好多瓶,例如1000元,100000瓶,這再去列二元一次不等式組顯然不太行得通......

所以,這就要用到更高級的算法,運用到C++代碼操作

代碼實現:

我們可以通過代碼來實現計算:

為了程序更靈活,我們可以讀入任意金額:

int a; //定義
cin>>a; //輸入有幾元錢
int b=a/2; //空瓶的數量
int c=b; //瓶蓋的數量
int sum=b; //記錄總共喝了幾瓶

錶示花光這些錢,可以得到a/2個空瓶,也就有a/2個瓶蓋,喝了a/2瓶水,所有的量定義完了之後,我們就要想下面部分了

每次都有可能再兌換到水,這將會直接影響空瓶的數量以及瓶蓋都數量

所以,這就要用到while循環

看看題目:四個瓶蓋換一瓶,兩個空瓶換一瓶

所以,只要b>=2或者c>=4,就會衍生出許多情况,故循環條件就是b>=2或者c>=4,然後再繼續循環查看

while(b>=2||c>=4) //只要空瓶>=2或者瓶蓋>=4,就可以再換,繼續查看情况

繼續查看,如果瓶蓋大於4個,就會消耗4個瓶蓋,再獲得一瓶礦泉水,因此產生一個空瓶和一個瓶蓋;如果空瓶大於2個,就會消耗2個空瓶,再獲得一瓶礦泉水,因此產生一個空瓶和一個瓶蓋

if(b>=2) //如果空瓶>=2
{
b-=2; //換走兩個空瓶
sum++; //可以再喝一瓶
c+=1; //換來一瓶得到一個瓶蓋
b+=1; //換來一瓶得到一個空瓶
}
if(c>=4) //如果瓶蓋>=2
{
c-=4; //換走四個瓶蓋
sum++; //可以再喝一瓶
b+=1; //換來一瓶得到一個空瓶
c+=1; //換來一瓶得到一個瓶蓋
}

只要走到最後b>=2或者c>=4,意思就是還能換,就會再走一遍,直到兩個條件都不成立,不能再換為止

最後只要輸出sum,喝了幾瓶就行啦

cout<<sum;

 完整代碼:

#include<bits/stdc++.h>
using namespace std;
int main()
{
int a; //定義
cin>>a; //輸入有幾元錢
int b=a/2; //空瓶數量
int c=b; //瓶蓋數量
int sum=b; //記錄總共喝了幾瓶
while(b>=2||c>=4) //只要空瓶>=2或者瓶蓋>=4,就可以再換
{
if(b>=2) //如果空瓶>=2
{
b-=2; //換走兩個空瓶
sum++; //可以再喝一瓶
c+=1; //換來一瓶得到一個瓶蓋
b+=1; //換來一瓶得到一個空瓶
}
if(c>=4) //如果瓶蓋>=2
{
c-=4; //換走四個瓶蓋
sum++; //可以再喝一瓶
b+=1; //換來一瓶得到一個空瓶
c+=1; //換來一瓶得到一個瓶蓋
}
}
cout<<sum; //輸出一共喝了幾瓶
return 0;
}

運行效果:

這樣,這道例題就解决啦(若是直接給的瓶子數量,稍作修改即可,這裏就不再贅述)

(當然,這是不存在“借”這個行為,否則另外討論計算)

簡便算法實現:

運用遞推迭代算法:

喝的總瓶數m=4*初次瓶數k-5

這裏的k再這道題就是b(a/2),即是買光錢所得到的瓶數

這麼一看,是不是就特別easy?

至此,這一類問題你已經會做了,還有更多更巧妙的算法,就不再一一說明了

總結:

這是一道相對簡單,貼近生活的一道數學邏輯題,運用方程,代碼,算法.....都可以實現解答

補充:

其中有一個規律,即最後總會剩下3個瓶蓋,1個空瓶

版权声明:本文为[瘋狂的函數]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201072037423464.html