题目都说是模拟了,那就模拟一下,可以借助递归,逻辑上更直观点。

#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;
}