題目:兩元一瓶啤酒,兩個啤酒瓶可換一瓶啤酒,四個啤酒瓶蓋可換一瓶啤酒,求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));
}