被难住了,请大家支援。【算法题】
输入N一个正整数,创建一个数组,数组的大小为N。
随机数1-N填充到数组中,求解数组中所有加起来和等于N的组合
比如
输入4
数组【1,1,3,4】
4 =4
1+3 =4
这样2个组合
[解决办法]
- C/C++ code
#include <stdio.h>#include <malloc.h>void test(int *mark, int *array, int i, int length){ int j, sum = 0; if(i >= length) { for(j = 0; j < length; ++j) if(mark[j] == 1) sum += array[j]; if(sum == length) { for(j = 0; j < length; ++j) { if(mark[j] == 1) printf("%d ", array[j]); } printf("\n"); } return; } mark[i] = 1; ++i; test(mark, array, i, length); mark[i - 1] = 0; test(mark, array, i, length);}int main(){ int *array, *mark; int i, length; scanf("%d", &length); array = (int*)malloc(sizeof(int)*length); mark = (int*)malloc(sizeof(int)*length); for(i = 0; i < length; ++i) { scanf("%d", &array[i]); mark[i] = 0; } test(mark, array, 0, length); free(array); free(mark); return 0;}如果输入41 1 3 4输出1 31 34输入51 2 3 4 5输出1 42 35
[解决办法]
/* for(seq = 1; seq <= arr_size; seq++){
sprintf(str, "(%d,%d)", seq - 1, arr[seq-1]);
test(arr[seq - 1], seq, arr_size - arr[seq - 1], str);
}
*/
str[0]='\0';
test(0, 0, arr_size, str);