题目都说是模拟了,那就模拟一下,可以借助递归,逻辑上更直观点。
#include <stdio.h>
int func(int n)
{
if (n < 2) return 0;
if (n == 2) return 1;
int sum = 0, i = 1;
// 保证 i * 3 小于或等于n,这样就能兑换i瓶了
while (i * 3 <= n) ++i;
if (i * 3 > n) --i;
sum += i;
n = n - i * 3 + i;
return sum + func(n);
}
int main()
{
int n;
while (scanf("%d", &n) == 1 && n)
printf("%d\n", func(n));
return 0;
} 
京公网安备 11010502036488号