一道很有意思的题,重点在于看成很多次买酒,除了第一次用钱买,之后都用空瓶和瓶盖。只需记录下每一次空瓶数、瓶盖数,然后用空瓶和瓶盖买新酒喝,接着更新剩余的空瓶和瓶盖数(注意要加上新买的酒喝完后的空瓶和瓶盖),在下一次继续用空瓶和瓶盖买酒喝,如此循环,直到空瓶和瓶盖都买不起酒即可。
代码如下:
#include<stdio.h>
int main()
{
int money, bottle, n;
int a, b, ba, bb; /*a是空瓶,b是瓶盖*/
scanf("%d", &money);
bottle = money / 2;
n = bottle; /*n用来将第一次用钱买的酒的空瓶数和瓶盖数传递给a和b*/
a = n;
b = n;
while ((a >= 2) || (b >= 4)) /*当a和b都不足以买酒时循环停止*/
{
ba = a / 2, bb = b / 4; /*用a去买酒,买到ba瓶;用b去买酒,买到bb瓶*/
a = a % 2, b = b % 4; /*买完就后剩余的a和b*/
bottle = bottle + ba + bb; /*买的新酒和之前的酒一共装在bottle里*/
a = a + ba + bb, b = b + ba + bb; /*剩余的a加上新酒喝完后补充的得到新一轮买酒的资金a。b同理*/
}
printf("%d %d %d %d", bottle, a, b, money % 2);
return 0;