買啤酒

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章