已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > C/C++ > 讨论/求助

标题: 【已解决】一个关于acm的问题,用的递归调用解决的

作者: @Ta

时间: 2013-10-11

点击: 2484

这是一个acm的题吧。。。网上有这个题目的。。。我没有原题,只记住了。
这个程序要求输入一个数字,然后把所有能组成这个数字的方法统计出来。。。
比如:输入2,可以分为1+1,2,两种组成(包括本身)
输入3,可以分为1+1+1,1+2,3,三种组成。
输入4,可以分为1+1+1+1,1+1+2,1+3,2+2,4,五种组成,以此类推。。相信大神们懂得了题目的意思了吧。
然后程序要求能够把组成种类输出。
我用的是递归调用,网上的答案和我的不同,我完全是自己写的,也不知道有没有人和我的想法一样。可是我的程序不晓得哪里出了问题,可能是我太笨了吧。
以下是我的源码大神们帮我看看好吗
#include "stdio.h"
int count=0;//得出结果前的总和
int total=0;//组成种类
void cac(int num,int i)
{
for(;i<=num;i++)
{
count=count+i;
if(count>num)//超出数字直接终止函数,返回上级函数
{
count=count-i;//总和回到上次的总和
return;
}
else if(count==num)//判断是否找出
{
total++;
count=count-i;
return;
}
else//未达到总和,递归调用。
{
cac(num,i);
}
}
}
void main()
{
int num;
scanf("%d",&num);
cac(num,1);
printf("%d",total);
}
最后@老虎会游泳 嘻嘻。。能帮帮我吗。。。
--------------------------------------------------
以下修改后的代码。。。唉。。。从昨天下午弄到现在。弄了一天。。。
#include "stdio.h"
int count=0; //得出结果前的总和
int total=0; //组成种类
void cac(int num,int i)
{
for(;i<=num;i++)
{
count=count+i;
if(count>num) //超出数字直接终止函数,返回上级函数
{
count=count-i; //总和回到上次的总和
return;
}

else if(count==num) //判断是否找出
{
total++;
count=count-i;
return;
}
else //未达到总和,递归调用。
{
cac(num,i);
}
count=count-i;
}
}
void main()
{
    int num;
    printf("请输入需要拆解的数字:");
    scanf("%d",&num);
    cac(num,1);
    printf("所有拆解方法总和为:%d",total);
}
昨天晚上不知道为什么总是错误。。。今天早上起床修改了一下下就好了。。。汗。。。
可能是我太粗心了。。。

[隐藏样式|查看源码]


『回复列表(1|显示机器人聊天)』

1. 你在贴吧发的帖已被百度收录
(/@Ta/2013-10-11 22:41//)

回复需要登录

8月14日 17:28 星期四

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1