| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 316 人关注过本帖
标题:有关拆数组合的程序,不知道问题在哪里?
只看楼主 加入收藏
bigdogme2003
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-6-23
收藏
 问题点数:0 回复次数:1 
有关拆数组合的程序,不知道问题在哪里?

问题描述:给定一个正整数N,输出所有和为N的正整数的组合。组合中不能出现重复的数字,并且没有顺序区别,即1,9和9,1是同一个组合。
示例:给定一个数9。
和为9的组合有:1、8
1、2、6
1、3、5
2、7
2、3、4
3、6
4、5
9
输入:任意一个正整数N,N<=120
输出:打印出所有和为N的正整数组合以及组合的总数SUM,每行打印一个组合并要求各组合之间有序,便于检查对错,统计运行时间。
可以通过输入100来检验算法的效率,因为和为100的组合有40多万种。由于打印40多万行数据在控制台需要花很长时间,所以建议将结果输出到文件,方便检查。


#include <stdio.h>
#define MAX 100
#define data 10 //以10为例进行拆数
int a[MAX];
int k=1;

void plus(int N,int m)
{
int i,j,s,sum;
if(m>=N/2) return; //只循环到N/2,拆数组合无重复
for(j=1;j<k;j++) //输出一行
{ if(N==a[j]) break; //删掉有重复数字的行
else if(j==k) //无重复的组合
{printf("\n%d=",data);
{for(s=0;s<k;s++) //输出符合条件的拆数组合
printf("%d+",a[s]);
printf("%d\n",N);
}
}

for(i=m+1;i<N/2;i++)//以第一个数字循环拆数
{
sum=0;
a[k]=i; //数组a[]记录各个加数
sum+=a[k]; //sum记录前几个加数之和
k++;
plus(N-sum,i);
}
}

main()
{
plus(data,0);
}

搜索更多相关主题的帖子: 检查 统计 正整数 
2007-10-30 18:20
bigdogme2003
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-6-23
收藏
得分:0 

怎么没有人来啊!!!

2007-11-08 22:50
快速回复:有关拆数组合的程序,不知道问题在哪里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023944 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved