輸入 N 瓶可樂,
3 瓶可樂空瓶可以換 1 瓶可樂,
問總可以喝到幾瓶可樂?
(當然,最後剩下兩瓶可樂空瓶時,可以多借一瓶空瓶,
最後當然要還回去!!)
首先,
來個循規蹈矩的寫法
#include < iostream > using namespace std; int main() { int n; while( cin >> n ) { // 喝的瓶數( sum ),剩餘的空瓶( emp ) int sum = 0, emp = 0; // n + emp >= 3 時,也就是不用借瓶子的狀況下 while( n + emp > 2 ) { // 喝的瓶數 += 現有的可樂數 sum += n; // 空瓶數 = 現有的可樂數 + 上次剩餘空瓶數 emp += n; // 每 3 個空瓶換 1 瓶可樂 n = emp / 3; // 換完剩餘空瓶數 emp %= 3; } // 最後一次換的可樂將不會喝到,所以補喝 sum += n; // 如果空瓶數為 2 ,可以借一個空瓶,換一瓶可樂,所以喝的可樂數 +1 if( n + emp == 2 ) sum ++; // 輸出總共喝多少可樂 cout << sum << endl; } return 0; }
再來,來個精簡版!
看看下表有何規律
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
sum | 1 | 3 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | 18 | 19 | 21 |
n = 1 時,sum = 1。
n = 2 時,sum = 3,跟 n = 1 時差 2 。
n = 3 時,sum = 4,跟 n = 2 時差 1 。
n = 4 時,sum = 6,跟 n = 3 時差 2 。
n = 5 時,sum = 7,跟 n = 4 時差 1 。
n = 6 時,sum = 9,跟 n = 5 時差 2 。
n = 7 時,sum = 10,跟 n = 6 時差 1 。
n = 8 時,sum = 12,跟 n = 7 時差 2 。
n = 9 時,sum = 13,跟 n = 8 時差 1 。
......
所以,可以這樣寫
#include < iostream > using namespace std; int main() { int n; while( cin >> n ) cout << int( n * 1.5 ) << endl; return 0; }
沒有留言:
張貼留言