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 }