换汽水瓶
2016-07-15 11:56
197 查看
/* 有这样一道智力题:“某商店规定:三个空汽水瓶能够换一瓶汽水。 小张手上有十个空汽水瓶,她最多能够换多少瓶汽水喝?”答案是5瓶,方法例如以下:先用9个空瓶子换3瓶汽水。喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。 然后你让老板先借给你一瓶汽水,喝掉这瓶满的。喝完以后用3个空瓶子换一瓶满的还给老板。 假设小张手上有n个空汽水瓶。最多能够换多少瓶汽水喝? 题目类别: 循环 /* 输入: 输入文件最多包括10组測试数据。每一个数据占一行,仅包括一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。 输出: 对于每组測试数据,输出一行。表示最多能够喝的汽水瓶数。假设一瓶也喝不到,输出0。*/ void main(){ int empty_bottle; int out_drink_num; while(1){ empty_bottle=0; out_drink_num=0; printf("请输入空瓶数量empty_bottle= "); scanf("%d",&empty_bottle); drink(empty_bottle,&out_drink_num); printf("最多可换汽水out_drink_num= %d\n",out_drink_num); } } //用递归思想 void drink(int empty_bottle,int* out_drink_num){ if(empty_bottle<2) return ; int temp=empty_bottle/3+empty_bottle%3; if(empty_bottle==2) { (*out_drink_num)+=1; temp=1;empty_bottle=1;} (*out_drink_num)+= empty_bottle/3; drink(temp,out_drink_num); } //比较上面。下面是具有返回值的 /* int Bottle(int n) { if(n<2) return 0; if(n==2) return 1; else return (n/3+Bottle(n/3+n%3)); } int main() { int n; cin>>n; cout<<Bottle(n)<<endl; } */
相关文章推荐
- 【Debug】The value of ESP was not properly saved across a function call.
- Matlab中读取txt文件的几种方法
- ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
- C++ 海康 YV12转RGB32,YV420转RGB32
- 解决mvn resources 与自定义拦截器DefaultInterceptor冲突的问题
- Windows如何得到物理CPU的数目
- Rufus 2.11超级精简版/超精简/懂你版
- SwipeRefreshLayout 首次打开出现加载图标
- c# 编程语言tag
- 全文检索solr
- phpstorm开发中常用快捷键
- [C++]高效使用容器的一些建议
- GCC 和 cmake的关系?
- [Spring MVC] - @ModelAttribute使用
- C++小游戏——走迷宫
- Android shape和selector 结合使用实例代码
- HTTPS和HTTP的区别总结
- 使用jackson来进行数组格式的json字符串转换成List。
- vmware中centos7设置静态IP
- Linux安装sshfs挂载远程目录到本地及卸载