尊宝国际娱乐APP下载

设为首页收藏本站

编程十万个为什么,属于程序员的编程论坛

 找回密码
 5秒快速注册
QQ登录 只需一步,快速开始
搜索
查看: 2210|回复: 6
打印 上一主题 下一主题

[跪求代码] 求大神帮忙,将下面的代码改成用递归实现

[复制链接]
跳转到指定楼层
传说中的楼主
发表于 2015-3-13 21:07:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
50BC币
统计1分、2分和5分的硬币凑成1元,一共有多少种方法。下面的代码直接循环统计,用递归怎么写?谢谢大家了!
#include <iostream>
using namespace std;
int main()
{
        int count=0;
        for(int i=0;i<=20;i++)
        {
                for(int j=0;j<=50;j++)
                {
                        for(int k=0;k<=100;k++)
                        {
                                if(5*i + 2*j + k==100)
                                {
                                        count++;
                                        cout<<i<<" "<<j<<" "<<k<<endl;
                                }}}}
        cout<<count<<endl;
        return 0;

}

最佳答案

查看完整内容
[mw_shl_code=cpp,true]#include using namespace std; int divider[] = {1, 2, 5}; int dividerLen = sizeof(divider) / sizeof(int); int solve(int total, int dividerNum); int main() { int total = 10; int count; count = solve(total, divider[dividerLen - 1]); cout
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 !wechat_share!!wechat_share!
收藏收藏 转播转播 分享分享 分享淘帖 顶一个顶一个 踩一下踩一下

BcWhy版权声明1、本帖可以任何形式转载到任何媒体,但必须带上本贴的URL连接,否则即视为同意支付 1000 元报酬
2、本主题所有言论和图片纯属周小伦个人意见,与本论坛立场无关
3、本主题由该帖子作者周小伦发表,该帖子作者周小伦与本站享有帖子相关版权
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、本站管理员和版主有权不事先通知发贴者而删除本文

令人羡慕的沙发
发表于 2015-3-13 21:07:23 | 只看该作者
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
#include <iostream> using namespace std; int divider[] = {1, 2, 5}; int dividerLen = sizeof(divider) / sizeof(int); int solve(int total, int dividerNum); int main() { int total = 10; int count; count = solve(total, divider[dividerLen - 1]); cout << "共有" << total << "种解法!"<< endl; system("PAUSE"); return 0; } int solve(int total, int dividerNum) { int result = 0; //如果只用1分钱来分的话,那么分配的方法只有一种 int i, j; if(total == divider[0]) { return 1; } //如果比较多个钱币的分配的时候,先用最大的钱币来分 //例如,先用5来分,例如10,分5为2个,余数为0。 //根据num/dividerNum得到为3种情况,一种是0个5,余10,一种是1个5,余5,和2个5,余0 //再把余数10,和5 分别用2来分,以此类推 //最后分的结果全部加起来就是完整的分发的个数 for(i = dividerLen - 1; i >= 1; i--) { if(dividerNum == divider[i]) { for(j = 0; j <= total / dividerNum ; j++) { result += solve((total - dividerNum*j), divider[i-1]); } } } return result; }


/*
输出结果:
共有10种解法!
*/
回复 使用道具 举报
冷板凳
发表于 2015-3-13 21:38:09 | 只看该作者
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
/* 1分2分5分的硬币,组成1角,共有多少种组合。 */ #include <iostream> using namespace std; int solve(int total); int main() { int total = 10; int count; count = solve(total); cout << "=========================" << endl; cout << "共有" << total << "种解法!"<< endl; system("PAUSE"); return 0; } int solve(int total) { int max1 = total / 5 + 1; int i, j, k, max2, count; count = 0; for (i = 0; i < max1; i++) { max2 = (total - i * 5) / 2 + 1; for (j = 0; j < max2; j++) { k = (total - i * 5 - j * 2) / 1; if (i || j || k) { count++; cout << " 有 " << i << "个5," << " 有 " << j << "个2," << " 有 " << k << "个1." << endl; } } } return count; }


/*
输出结果:
有 0个5, 有 0个2, 有 10个1.
有 0个5, 有 1个2, 有 8个1.
有 0个5, 有 2个2, 有 6个1.
有 0个5, 有 3个2, 有 4个1.
有 0个5, 有 4个2, 有 2个1.
有 0个5, 有 5个2, 有 0个1.
有 1个5, 有 0个2, 有 5个1.
有 1个5, 有 1个2, 有 3个1.
有 1个5, 有 2个2, 有 1个1.
有 2个5, 有 0个2, 有 0个1.
=========================
共有10种解法!
*/
回复 使用道具 举报
4
 楼主| 发表于 2015-3-13 22:29:46 | 只看该作者
夜影 发表于 2015-3-13 21:38
[mw_shl_code=cpp,true]/*
1分2分5分的硬币,组成1角,共有多少种组合。
*/

先谢谢了啊,可是这样做还是通过循环统计出来的,循环次数是比之前的减少了许多。我的理解是:递归是在函数里面调用这个函数本身,这样的话代码怎样写呢?请大神再帮我看看
回复 使用道具 举报
5
发表于 2015-3-13 22:33:22 | 只看该作者
没看清楚你要的是递归 重来。。。========
回复 使用道具 举报
6
 楼主| 发表于 2015-3-13 23:36:46 | 只看该作者
夜影 发表于 2015-3-13 22:43
[mw_shl_code=cpp,true]#include
using namespace std;

main函数里输出的应是count,solve函数if的条件改成if(dividerNum == divider[0])就好了,无论余数多少,dividerNum是1时就可以分配。最后运行可以得出结果,多谢大神了!
回复 使用道具 举报
7
发表于 2015-3-19 07:07:13 掌上BcWhyBcWhy手机版 | 只看该作者
过来看看lang_wechat_threadmessage
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 5秒快速注册
本版积分规则
关闭

BcWhy推荐上一条 /1 下一条

QQ|关于我们|最新帖子|小黑屋|手机版|编程十万个为什么 ( 粤ICP备16108587号-2   GMT+8, 2017-10-21 11:11 , Processed in 0.146738 second(s), 33 queries , File On.
Powered by Discuz! X3.3 © 2001-2017 Comsenz Inc.
快速回复 返回顶部 返回列表
尊宝国际娱乐APP下载亚虎娱乐手机官方网站亚虎国际娱乐齐乐娱乐国际
优乐娱乐齐乐娱乐网优乐娱乐龙8娱乐手机下载
优乐娱乐亚虎娱乐手机官方网站亚虎国际娱乐梦之城娱乐
尊宝国际娱乐APP下载尊宝国际手机首页尊宝国际娱乐城齐乐娱乐国际
优乐娱乐齐乐娱乐网优乐娱乐龙8娱乐手机下载