读书人

被难住了请大家支援。【算法题】解决

发布时间: 2012-03-07 09:13:51 作者: rapoo

被难住了,请大家支援。【算法题】

输入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);

读书人网 >软件架构设计

热点推荐