作者在 2009-03-14 21:49:03 发布以下内容
该题目如下:
任意给一数组,如{-10,45,35,99,10,6,9,20,17,18}
再任意给一个值,如35.
请从上面的数组中找出所有的组合,使他们的和等于35.
例如对于上面的数组,所有的组合情况为:
35;
-10+45;
17+18;
6+9+20;
-10+35+10;
-10+17+18+10;
-10+6+9+20+10;
注意,每一种组合中一个数只能出现一次。
#include <stdio.h>
int set(int * array, int arraySize, int sum, int * ans, int ansSize){
int i;
if (arraySize == 0){
if (sum != 0) return 0;
printf("%d",ans[0]);
for (i=1; i<ansSize; i++){
if (ans[i]<0) printf("+(%d)", ans[i]);
else printf("+%d", ans[i]);
}
printf(";\n");
return 1;
}
i= set(array+1, arraySize-1, sum, ans, ansSize);
ans[ansSize++] = array[0];
return i+set(array+1, arraySize-1, sum-array[0], ans, ansSize);
}
int main(){
int array[]={-10, 45, 35, 99, 10, 6, 9, 20, 17, 18};
int ans[20];
int arraySize = 10;
int size=0;
int sum = 35;
int num;
num = set(array, arraySize, sum, ans, size);
任意给一数组,如{-10,45,35,99,10,6,9,20,17,18}
再任意给一个值,如35.
请从上面的数组中找出所有的组合,使他们的和等于35.
例如对于上面的数组,所有的组合情况为:
35;
-10+45;
17+18;
6+9+20;
-10+35+10;
-10+17+18+10;
-10+6+9+20+10;
注意,每一种组合中一个数只能出现一次。
#include <stdio.h>
int set(int * array, int arraySize, int sum, int * ans, int ansSize){
int i;
if (arraySize == 0){
if (sum != 0) return 0;
printf("%d",ans[0]);
for (i=1; i<ansSize; i++){
if (ans[i]<0) printf("+(%d)", ans[i]);
else printf("+%d", ans[i]);
}
printf(";\n");
return 1;
}
i= set(array+1, arraySize-1, sum, ans, ansSize);
ans[ansSize++] = array[0];
return i+set(array+1, arraySize-1, sum-array[0], ans, ansSize);
}
int main(){
int array[]={-10, 45, 35, 99, 10, 6, 9, 20, 17, 18};
int ans[20];
int arraySize = 10;
int size=0;
int sum = 35;
int num;
num = set(array, arraySize, sum, ans, size);