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 }