题目都说是模拟了,那就模拟一下,可以借助递归,逻辑上更直观点。
#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; }