买啤酒
来源:互联网 发布:手机数据永久删除 编辑:程序博客网 时间: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));}
阅读全文
0 0
- 买啤酒
- 买啤酒问题
- 编程解决买啤酒问题
- 买啤酒最优解问题
- 算法初体验:10元买啤酒
- c语言递归调用:买啤酒
- 一共买了多少啤酒和饮料
- 啤酒
- 一瓶啤酒1块钱,两个空瓶能换1瓶啤酒,我有20块钱,请问我能买多少瓶啤酒?请写一个算法。
- 【原创】10元买啤酒2个空瓶换一瓶4个瓶盖换一瓶经典算法
- 社交+啤酒
- 啤酒-Bestly
- 德国啤酒/进口啤酒/德国原装进口啤酒/万奈仕啤酒
- 2元可以买一瓶啤酒,4个瓶盖可以换一瓶,2个空瓶可以换一瓶,,10元最多可以喝多少瓶
- 【啤酒生产工艺】普通啤酒加工过程
- 青岛的啤酒
- 七类人不宜喝啤酒
- 啤酒的饮用方法
- Linux安装方法
- 49 C语言程序的暂停
- angular2父子组件的数据传递,子组件向父组件抛出数据
- 多线程-线程控制之休眠线程
- Android学习笔记ContentProvider
- 买啤酒
- [HDU]2255-奔小康赚大钱
- 26. Remove Duplicates from Sorted Array
- 关于Win10创意者更新之后蓝屏的修复办法
- 解决Gradle DSL method not found: 'compile()'错误的方法
- struts2
- Android插件化:从入门到放弃
- mysql 存储过程 通过存储过程的方式简化sql操作
- 发送有序广播