#include<stdio.h>
#include<windows.h>
int HeQiShui(int M)
{
static int flag = 0;
if (2 * M + flag < 2)
{
return 0;
}
if (M % 2 == 0)
{
return M + HeQiShui(M / 2);
}
else if (M % 2 == 1 && flag == 0)
{
flag = 1;
return M + HeQiShui(M / 2);
}
else if (M % 2 == 1 && flag == 1)
{
flag = 0;
return M + HeQiShui(M / 2 + 1);
}
}
int main()
{
int money = 20;
int num = 0;
num = HeQiShui(money);
printf("可以买 %d 瓶汽水\n", num);
system("pause");
return 0;
}
上面是用递归的方式实现的:
在这里,我们判断M能不能全部兑换完汽水分两种情况:
1.如果可以,M为偶数:
就再进行M/2的递归,表示本次M个瓶子兑换M/2瓶汽水。
2.如果不可以,就还需判断flag是否为1或0(flag初值为0),如果flag为1,就表示上次兑换后剩下一个空瓶子,以供这次兑换使用。如果flag为0,则表示上次兑换没有剩下空瓶子。直到2*M+flag<2为止,不能再进行兑换。