Program
#include <stdio.h>
#include <conio.h>
void subset(int, int, int);
int x[10], w[10], d, count = 0;
void main()
{
int i, n, sum = 0;
printf("\n*********************************************************");
printf("\n*********************************************************");
printf("\n** Program for Sum of Subset Problem in C **");
printf("\n** Created by Sheetal Garg **");
printf("\n** Assistant Professor **");
printf("\n** Phone No:9467863365 **");
printf("\n*********************************************************");
printf("\n*********************************************************");
printf("\nEnter the no. of elements: ");
scanf("%d", &n);
printf("\nEnter the elements in ascending order:\n");
for (i = 0; i < n; i++)
scanf("%d", &w[i]);
printf("\nEnter the sum: ");
scanf("%d", &d);
for (i = 0; i < n; i++)
sum = sum + w[i];
if (sum < d)
{
printf("No solution\n");
getch();
return;
}
subset(0, 0, sum);
if (count == 0)
{
printf("No solution\n");
getch();
return;
}
getch();
}
void subset(int cs, int k, int r)
{
int i;
x[k] = 1;
if (cs + w[k] == d)
{
printf("\n\nSubset %d\n", ++count);
for (i = 0; i <= k; i++)
{
if (x[i] == 1)
printf("%d\t", w[i]);
}
}
else if (cs + w[k] + w[k + 1] <= d)
subset(cs + w[k], k + 1, r - w[k]);
if (cs + r - w[k] >= d && cs + w[k] <= d)
{
x[k] = 0;
subset(cs, k + 1, r - w[k]);
}
}
Output
********************************************************* ********************************************************* ** Program for Sum of Subset Problem in C ** ** Created by Sheetal Garg ** ** Assistant Professor ** ** Phone No:9467863365 ** ********************************************************* ********************************************************* Enter the no. of elements: 4 Enter the elements in ascending order: 3 4 5 1 Enter the sum: 9 Subset 1 3 5 1 Subset 2 4 5