1. 程式人生 > 其它 >C/C++程式設計學習 - 第8周 ⑤ 喝酒

C/C++程式設計學習 - 第8周 ⑤ 喝酒

技術標籤:C語言程式設計c++演算法程式語言喝酒數學

題目連結

題目描述

王大釘喜歡喝酒,存貨都喝完了,他就去樓下買,正好樓下的商店為了響應學校的 ACM 校賽推出了優惠活動:凡是在本店買的啤酒,喝完以後 3 個空瓶可以換一瓶,4 個瓶蓋也可以換一瓶酒。

王大釘覺得太合算了,決定多買,現在他手裡的錢可以買 N 瓶酒,但是他算不出來,通過活動兌換他一共可以喝到多少瓶?他很難過,你能幫他計算一下他能喝的酒的數量嗎?

輸入格式:

輸入第一行是一個正整數 T,代表測試樣例的數量,0<T≤100。

接下來有 T 行,每行輸入一個整數 N,代表一開始所購買的啤酒數量,0≤N<1000000。

輸出格式:

對應每組資料,輸出一個結果,即通過活動兌換後,總共能喝到的啤酒數。

Sample Input

3
1
2
10

Sample Output

1
2
22

思路

挺有意思的一道題, 3 個空瓶可以換一瓶酒,4 個瓶蓋也可以換一瓶酒,我們可以定義兩個cnt變數,用來計數空瓶的數量和瓶蓋的數量,用while迴圈模擬喝酒換酒的過程,具體操作可以看程式碼。當然也可以手算公式進行求解,時間複雜度會大大降低。

C++程式碼:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t, n, sum, cnt1, cnt2;
	while(cin >> t)
	{
		while
(t--) { cin >> n; sum = n; cnt1 = n; cnt2 = n; while(cnt1 >= 3 || cnt2 >= 4) { if(cnt1 >= 3) { sum += cnt1 / 3; cnt2 += cnt1 / 3; cnt1 = cnt1 / 3 + cnt1 % 3; } if(cnt2 >= 4) { sum += cnt2 / 4; cnt1 += cnt2 / 4; cnt2 =
cnt2 / 4 + cnt2 % 4; } } cout << sum << endl; } } return 0; }