100
101
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.cnblogs.com/daybreaking/p/12237758.html