bool isSubsetSum(int arr[],int size,int sum) { if(sum == 0) return true; if(size == 0 && sum >=0) return false; if(sum >= arr[size-1]) return isSubsetSum(arr,size-1,sum); return (isSubsetSum(arr,size-1,sum) || isSubsetSum(arr,size-1, sum-arr[size])); }
// Returns true if there is a subset of set[] with sun equal to given sum int isSubsetSum(int set[], int n, int sum) { // Base Cases if (sum == 0) return 1; if (n == 0 && sum != 0) return 0; // If last element is greater than sum, then ignore it if (set[n-1] > sum) return isSubsetSum(set, n-1, sum); /* else, check if sum can be obtained by any of the following (a) including the last element (b) excluding the last element */ return isSubsetSum(set, n-1, sum) || isSubsetSum(set, n-1, sum-set[n-1]); }
int isSubsetSum(double arr[], int n, double sum, double subset[], int count){ int i; if(sum == 0) { printf("\n"); quantityOfResults++; printf("<ul class=\"sum\" id=\"results%d\">\n", quantityOfResults); for(i =0; i < count; i++) printf("<li>%.2f</li>\n", subset[i]); printf("</ul>"); return true; } if(n < 0 && sum != 0) return false; subset[count] = arr[n]; return isSubsetSum(arr, n-1, sum-arr[n], subset, count + 1) + isSubsetSum(arr, n-1, sum, subset, count ); }
int main() { int set[] = {3, 34,-33, 4, 12, 5, 2}; int sum = 1; int n = sizeof(set)/sizeof(set[0]); if (isSubsetSum(set, n, sum) == true) printf("Found a subset with given sum"); else printf("No subset with given sum"); return 0; }
// Driver program to test above function int main() { int set[] = {3,2,4,11,5,6,4,3,45}; int sum = 25; int n = sizeof(set)/sizeof(set[0]); if (isSubsetSum(set, n, sum) == true) printf("Found a subset with given sum"); else printf("No subset with given sum"); return 0; }
int main() { int n,i,sum; printf("Input number of elements\n"); scanf("%d",&n); int set[n]; printf("Input array elements\n"); for(i = 0; i < n;i++) scanf("%d",&set[i]); printf("Enter Sum to check\n"); scanf("%d",&sum); if (isSubsetSum(set, n, sum) == 1) printf("Found a subset with given sum\n"); else printf("No subset with given sum\n"); return 0; }
int main() { int n,set[1000000]; int x,i; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&set[i]); } scanf("%d",&x); if (isSubsetSum(set, n, x) == true) printf("True\n"); else printf("False\n"); return 0; }
/* Driver program */ int main(int argc, char *argv[]){ if(argc==3){ int i; char *strNums = argv[1]; double* set = parseNumberSet(strNums); if(set==NULL) return -1; int n = sizeOfArray; double objectiveNumber = (double)atof(argv[2]); double subset[n]; isSubsetSum(set, n-1, objectiveNumber, subset, 0); if(quantityOfResults==0){ printf("<div class=\"alert\"><h3>No existe una suma que resulte en %.2f, pruebe otra vez.</h3></div>", objectiveNumber); } free(set); return 0; }else{ /*printf("Usage: %s number1,number2,... objective", argv[0]);*/ return -1; } }