题目:两元一瓶啤酒,两个啤酒瓶可换一瓶啤酒,四个啤酒瓶盖可换一瓶啤酒,求10元可以买几瓶啤酒。
1、不允许借瓶子、瓶盖:
#include<stdio.h>
//n个瓶,m个瓶盖
int GetCount(int n,int m)
{
if (n < 2 && m < 4)
{
printf("剩余瓶子%d个,瓶盖%d个 ",n,m);
return n;
}
int a = n / 2;
int b = n % 2;
int c = m / 4;
int d = m % 4;
return n-b + GetCount(a+c+b,a+c+ d);
}
void main()
{
for(int i=1;i<6;i++)
printf("%3d元 买%2d瓶啤酒\n",i*2,GetCount(i,i));
}
运行结果:
剩余瓶子1个,瓶盖1个 2元 买 1瓶啤酒
剩余瓶子1个,瓶盖3个 4元 买 3瓶啤酒
剩余瓶子1个,瓶盖3个 6元 买 7瓶啤酒
剩余瓶子1个,瓶盖3个 8元 买11瓶啤酒
剩余瓶子1个,瓶盖3个 10元 买15瓶啤酒
请按任意键继续. . .
2、允许借瓶子、瓶盖,用完即还。
#include<stdio.h>
//n个瓶,m个瓶盖
int GetCount(int n,int m)
{
if (n < 1 && m < 2)
{
printf("剩余瓶子%d个,瓶盖%d个 ",n,m);
return n;
}
int a = n / 2;//2个瓶子换1瓶啤酒
int b = n % 2;//剩余瓶子
int c = m / 4;//4个瓶盖换1瓶啤酒
int d = m % 4;//剩余瓶盖
if(b==1)//剩1个瓶子时暂借1个瓶子,用后即还
{
n++;
b=0;
d++;
}
if(d==3)//剩3个瓶盖时暂借1个瓶盖,用后即还
{
n++;
b++;
d=0;
}
if(d==2)//剩2个瓶盖,暂借2个瓶盖、1个瓶子,用后即还
{
n+=2;
d=0;
}
return n-b + GetCount(a+c+b,a+c+ d);
}
void main()
{
for(int i=1;i<6;i++)
printf("%3d元 买%2d瓶啤酒\n",i*2,GetCount(i,i));
}
运行结果:
剩余瓶子0个,瓶盖0个 2元 买 4瓶啤酒
剩余瓶子0个,瓶盖0个 4元 买 8瓶啤酒
剩余瓶子0个,瓶盖0个 6元 买12瓶啤酒
剩余瓶子0个,瓶盖0个 8元 买16瓶啤酒
剩余瓶子0个,瓶盖0个 10元 买20瓶啤酒
请按任意键继续. . .