題目描述
樂羊羊C型飲料,憑3個瓶蓋可以再換一瓶C型飲料,並且可以一直循環下去(但不允許暫借或賒賬)。
請你計算一下,如果小明不浪費瓶蓋,儘量地參加活動。
那麼,對於他初始買入的n瓶飲料,最後他一共能喝到多少瓶飲料。
輸入
每組測試數據輸入一行包含一個正整數n(1<=n<=10000)
輸出
樣例輸入 Copy
100
101
樣例輸出 Copy
149 151
每三瓶可以兌換一瓶,也就是每次減三後必須要加一。因此實際上是每兩瓶可以使得答案加一。
但是有一種特殊情況,即當飲料數爲2的時候,此時無法兌換,需要特判。
根據乘法的性質:
奇數 * 奇數 = 奇數
偶數 * 奇數 = 偶數
也就是說,如果一開始有奇數瓶飲料x,根據每三換一的規則,若x是3的倍數,那麼兌換一次後仍然是奇數瓶;若不是3的倍數,那麼 x % 3 + x / 3 也是奇數。所以無需特判,答案爲 x + x / 2。
如果一開始是偶數瓶飲料x, 根據兌換規則,若x是3的倍數,那麼兌換一次後仍然是偶數瓶;若不是3的倍數,那麼 x % 3 + x / 3 也是偶數。這樣偶數瓶飲料不停的兌換,最後一定會小於3,根據前面推出的性質,最後的數一定是偶數,因此是2。
需要特判,答案爲 x + x / 2 - 1.
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 8 int main() 9 { 10 int n; 11 while(scanf("%d", &n) != EOF) 12 { 13 if(n == 0) 14 printf("0\n"); 15 else 16 { 17 int t = n / 2; 18 if(n % 2 == 1) 19 printf("%d\n", n + t); 20 if(n % 2 == 0) 21 printf("%d\n", n + t - 1); 22 } 23 24 } 25 return 0; 26 }