编写程序求:给出一个整数n,一个数组{a1,a2,...,an},将n表示成数组中若干项的和,写出所有的可能。

例如:n=10,数组为{1,8,4,3,5,2},所有的可能为{1,4,3,2},{1,4,5},{8,2},{3,5,2}。... 例如:n=10,数组为{1,8,4,3,5,2},所有的可能为{1,4,3,2},{1,4,5},{8,2},{3,5,2}。 展开
 我来答
百度网友76bc4363f
推荐于2017-12-16 · TA获得超过1019个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:258万
展开全部
递归就可以解决,给你写个递归式吧;调用方法如下
int a[6]={1,8,4,3,5,2};
int chose[6]={-1,-1,-1,-1,-1,-1};
decompose( a,5,0,10,chose,0);

void print( int *chose , int n ){
for( int i = 0 ; i < n ; ++i )
printf("%d\t",chose[i]);
printf("\n");
}
//参数分别是,背包数组,数组最大下标,当前选到的第k个元素,要求解的和,已选的结果,已选结果的下标
void decompose( int *array , int max , int k , int subn , int *chose , int c ){
if( subn < 0 )
return ;
if( !subn ){
print( chose , c );
}
for( int i = k ; i <= max ; ++i ){
chose[c] = array[i];
decompose( array , max , i+1 , subn-array[i] , chose , c+1 );
chose[c] = -1;
}
}
更多追问追答
追问
我想知道的是输入一个数据n,数组也很大,用递归也行吗?
追答
那就比较慢了。这算法是n!的,我在给你一个思路吧,对于这种的更快。先对数组排序,然后再使用回溯法,求解的过程中剪枝会很快。
happyangelcp
2012-09-27
知道答主
回答量:33
采纳率:0%
帮助的人:12万
展开全部
程序我就不写了,麻烦,思路:所有数相加为n,所有数-1相加为n,知道a为 n,取值即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ywj321442
2012-09-27
知道答主
回答量:22
采纳率:0%
帮助的人:10.9万
展开全部
先排序,如果n比较小,暴力搜索。如果n比较大,用回溯法可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yangyongjunwhy
2012-09-27
知道答主
回答量:1
采纳率:0%
帮助的人:1580
展开全部
1+1=几
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式