买啤酒

题目:两元一瓶啤酒,两个啤酒瓶可换一瓶啤酒,四个啤酒瓶盖可换一瓶啤酒,求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));
}

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