买啤酒

来源:互联网 发布:手机数据永久删除 编辑:程序博客网 时间:2024/06/11 18:52

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

原创粉丝点击