题目:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒。100元最多可喝多少瓶啤酒?(不允许借啤酒)
思路:利用递归算法,一次性买完,然后递归算出瓶盖和空瓶能换的啤酒数
程序如下:
#include <stdio.h>
int GetNumber(int cap,int empty,int bottle) //cap瓶盖,empty空瓶,bottle啤酒瓶
{
if(empty < 3 && cap < 5)
{
return bottle;
}
int a = empty / 3; //空瓶可换的啤酒数
int b = empty % 3; //空瓶换完剩下的空瓶数
int c = cap / 5; //瓶盖可换的啤酒数
int d = cap % 5; //瓶盖换完剩下的瓶盖数
printf("cap = %d,empty = %d,bottle = %d\n",a+c+d,a+c+b,a+c+bottle);
return GetNumber(a+c+d,a+c+b,a+c+bottle);
}
int main(int argc, char const *argv[])
{
int num = 100/2;
printf("一共可以喝%d瓶\n",num + GetNumber(num,num,0));
return 0;
}
运行结果