題目描述
樂羊羊飲料廠正在舉辦一次促銷優惠活動,樂羊羊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 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/100437.html
標籤:其他
上一篇:PAT乙級1022
下一篇:全排列(dfs-有重復數字)
