C/C++程式設計學習 - 第8周 ⑤ 喝酒
阿新 • • 發佈:2021-01-25
題目描述
王大釘喜歡喝酒,存貨都喝完了,他就去樓下買,正好樓下的商店為了響應學校的 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;
}