您的位置:首页 > 其它

递归法求巧克力块数

2015-08-26 11:30 323 查看
假设我们可以从自动售货机购买巧克力,一次1美元。每块巧克力都有一个优惠劵。我们可以从自动售货机中用7张优惠劵兑换一块巧克力。我们想知道一点:如果我们有n美元,那么一共能吃到多少块巧克力,包括用优惠劵兑换到的巧克力。

例如,如果我们有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!";
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归