这是一个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);
}
昨天晚上不知道为什么总是错误。。。今天早上起床修改了一下下就好了。。。汗。。。
可能是我太粗心了。。。