数组求和
一个长度为n的数组arr,屏幕输出数组所有可能的和(从2个数到n数任意可能组合的和)函数原型void sumAll(int* arr, int n)
说下我的思路,求t(t从2到n)个数和时,先在a[0]到a[n - t]确定第一个数b1,然后在从b1到a[n-t-1]确定第二数,.......
请高手用C++代码实现,给出的算法复杂度越低越好
谢谢
[解决办法]
默认输入的m个数各不相同;
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
int main(void)
{
int set[MAX];
int data[MAX];
int m, n, position;
int i;
printf( "输入集合个数 M: ");
scanf( "%d ", &m);
i=0;
printf( "输入集合数据[%d个]: ",m);
while (i <m)
{
scanf( "%d ", data+i);
}
printf( "输入取出个数 n: ");
scanf( "%d ", &n);
for(i = 0; i < n; i++)
set[i] = i+1;
for(i = 0; i < n; i++)
printf( "%d ", data[set[i]-1]);
putchar( '\n ');
position = n - 1;
while(1)
{
if(set[n-1] == m)
position--;
else
position = n - 1;
set[position]++;
for(i = position + 1; i < n; i++)
set[i] = set[i-1] + 1;
for(i = 0; i < n; i++)
printf( "%d ", data[set[i]-1]);
putchar( '\n ');
if(set[0] > = m - n + 1)
break;
}
return 0;
}
[解决办法]
其他参考代码:
http://www.it130.net/C++/142078.htm