递归法求巧克力块数
2015-08-26 11:30
323 查看
假设我们可以从自动售货机购买巧克力,一次1美元。每块巧克力都有一个优惠劵。我们可以从自动售货机中用7张优惠劵兑换一块巧克力。我们想知道一点:如果我们有n美元,那么一共能吃到多少块巧克力,包括用优惠劵兑换到的巧克力。
例如,如果我们有20美元,我们最开始用20美元购买20块巧克力。这样一来,我们可以获得20张优惠劵。14张优惠劵可以兑换2块巧克力。这两块巧克力有含有两张优惠劵,所以,再加上最初剩下的6张优惠劵,就一共个有8张优惠劵。这样一来,我们又可以用其中的7张优惠劵兑换最后一块巧克力。最后,我们得到23块巧克力和两张富余的优惠劵。
针对这个问题写一个递归解决方案,从用户哪里购买巧克力所花的美元数,然后输出花完这些钱后得到的巧克力块数,并尽量多换优惠劵。
例如,如果我们有20美元,我们最开始用20美元购买20块巧克力。这样一来,我们可以获得20张优惠劵。14张优惠劵可以兑换2块巧克力。这两块巧克力有含有两张优惠劵,所以,再加上最初剩下的6张优惠劵,就一共个有8张优惠劵。这样一来,我们又可以用其中的7张优惠劵兑换最后一块巧克力。最后,我们得到23块巧克力和两张富余的优惠劵。
针对这个问题写一个递归解决方案,从用户哪里购买巧克力所花的美元数,然后输出花完这些钱后得到的巧克力块数,并尽量多换优惠劵。
#include<iostream> #include<cstdlib> using namespace std; //递归实现代金券所能兑换的巧克力数量 int chocolate_number(int n) { //(n/7 + n%7) < 7 说明剩下的代金券只能够n/7块巧克力 if((n/7 + n%7) < 7) return n/7; else return (chocolate_number((n/7 + n%7)) + n/7); } void main() { int m, number=0; cout << "Please input the dollars:\n"; cin >> m; if(m < 0) { cout << "illegal input !\n"; exit(1); } number = m + chocolate_number(m); cout << "The dollars could buy " << number << " blocks chocolate!"; }
相关文章推荐
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- Javascript递归打印Document层次关系实例分析
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件
- JavaScript的递归之递归与循环示例介绍
- C# 递归查找树状目录实现方法
- 全排列算法的非递归实现与递归实现的方法(C++)
- php递归列出所有文件和目录的代码
- java递归菜单树转换成pojo对象
- 一个JavaScript递归实现反转数组字符串的实例
- Java中的递归详解(用递归实现99乘法表来讲解)
- C语言的递归思想实例分析
- php通过递归方式复制目录和子目录的方法
- php递归法读取目录及文件的方法
- php实现递归与无限分类的方法