In This post we are solving Java Program to find a subset of a given set S of n positive integers whose SUM is equal to a given positive integer d.
11] Design and implement C++/Java Program to find a subset of a given set S = {Sl, S2,…, Sn} of n positive integers whose SUM is equal to a given positive integer d. For example, if S = {1, 2, 5, 6, 8} and d= 9, there are two solutions {1, 2, 6} and {1, 8}. Display a suitable message, if the given problem instance doesn’t have a solution.
PROGRAM :-
import java.util.Scanner;
import static java.lang.Math.pow;
public class subset {
void subSet(int num, int n, int x[]) {
int i;
for (i = 1; i <= n; i++)
x[i] = 0;
for (i = n; num != 0; i--) {
x[i] = num % 2;
num = num / 2;
}
}
public static void main(String[] args) {
int a[] = new int[10];
int x[] = new int[10];
int n, d, sum, present = 0;
int j;
System.out.println("enter the number of elements of set");
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
System.out.println("enter the elements of set");
for (int i = 1; i <= n; i++)
a[i] = sc.nextInt();
System.out.println("enter the positive integer sum");
d = sc.nextInt();
if (d > 0) {
for (int i = 1; i <= Math.pow(2, n) - 1; i++) {
subset s = new subset();
s.subSet(i, n, x);
sum = 0;
for (j = 1; j <= n; j++)
if (x[j] == 1)
sum = sum + a[j];
if (d == sum) {
System.out.print("Subset={");
present = 1;
for (j = 1; j <= n; j++)
if (x[j] == 1)
System.out.print(a[j] + ",");
System.out.print("}=" + d);
System.out.println();
}
}
}
if (present == 0)
System.out.println("Solution does not exists");
}
}
