题目:两元一瓶啤酒,两个啤酒瓶可换一瓶啤酒,四个啤酒瓶盖可换一瓶啤酒,求10元可以买几瓶啤酒。
1,不允许借瓶子的情况下
#include <stdio.h>
#include <stdlib.h>
int sum = 0;
int gai = 0;
int ping = 0;
void he(int n){
sum += n;
gai += n;
ping += n;
if(gai < 4 && ping < 2) return;
else {
int newSum = gai/4;
gai %=4;
newSum += (ping/2);
ping %= 2;
he(newSum);
}
}
int main() {
he(5);
printf("%d\n",sum);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int he(int ping,int gai) {
if(ping < 2 && gai < 4){
return ping;
}
int newPing = ping/2;
int shengPing = ping%2;
int newGai = gai/4;
int shengGai = gai%4;
return ping-shengPing+he(newPing+newGai+shengPing,newPing+newGai+shengGai);
}
int main() {
printf("%d\n",he(5,5));
return 0;
}
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个瓶盖,用后即还
{
m++;
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));
}