Related Articles
Check if is possible to get given sum from a given set of elements
• Difficulty Level : Easy
• Last Updated : 08 Feb, 2019

Given array of numbers and a integer x. Find whether it is possible or not to get x by adding elements of given array, we may pick a single element multiple times. For a given array, there can be many sum queries.

Examples:

```Input : arr[] = { 2, 3}
q[]  = {8, 7}
Output : Yes Yes
Explanation :
2 + 2 + 2 + 2 = 8
2 + 2 + 3 = 7
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The idea is to first sort the given array and then use the concept similar to Sieve of Eratosthenes. First take a large sized array ( which is maximum size of x). Initially keep zero in all it’s indexes. Make 1 at zero index ( we can get zero whatever the array is) . Now, traverse through the whole array and make all possible values as 1.

## C++

 `// CPP program to find if we can get given ` `// sum using elements of given array. ` `#include ` `using` `namespace` `std; ` ` `  `// maximum size of x ` `const` `int` `MAX = 1000; ` ` `  `// to check whether x is possible or not ` `int` `ispossible[MAX]; ` ` `  `void` `check(``int` `arr[], ``int` `N) ` `{ ` `    ``ispossible = 1; ` `    ``sort(arr, arr + N); ` ` `  `    ``for` `(``int` `i = 0; i < N; ++i) { ` `        ``int` `val = arr[i]; ` ` `  `        ``// if it is already possible ` `        ``if` `(ispossible[val]) ` `            ``continue``; ` ` `  `        ``// make 1 to all it's next elements ` `        ``for` `(``int` `j = 0; j + val < MAX; ++j) ` `            ``if` `(ispossible[j]) ` `                ``ispossible[j + val] = 1; ` `    ``} ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 2, 3 }; ` `    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``check(arr, N); ` `    ``int` `x = 7; ` `    ``if` `(ispossible[x]) ` `        ``cout << x << ``" is possible."``; ` `    ``else` `        ``cout << x << ``" is not possible."``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find if we can get given ` `// sum using elements of given array. ` `import` `java.util.*; ` ` `  `class` `solution ` `{ ` ` `  `// maximum size of x ` `int` `MAX = ``1000``; ` ` `  `// to check whether x is possible or not ` `static` `int` `[]ispossible = ``new` `int``[``1000``]; ` `static` `void` `check(``int``[] arr, ``int` `N) ` `{ ` `     `  `    ``ispossible[``0``] = ``1``; ` `    ``Arrays.sort(arr); ` ` `  `    ``for` `(``int` `i = ``0``; i < N; ++i) { ` `        ``int` `val = arr[i]; ` ` `  `        ``// if it is already possible ` `        ``if` `(ispossible[val] == ``1``) ` `            ``continue``; ` ` `  `        ``// make 1 to all it's next elements ` `        ``for` `(``int` `j = ``0``; j + val < ``1000``; ++j) ` `            ``if` `(ispossible[j]== ``1``) ` `                ``ispossible[j + val] = ``1``; ` `    ``} ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int``[] arr = { ``2``, ``3` `}; ` `    ``int` `N = arr.length; ` `    ``check(arr, N); ` `    ``int` `x = ``7``; ` `    ``if` `(ispossible[x]== ``1``) ` `        ``System.out.println(x+``" is possible."``); ` `    ``else` `        ``System.out.println(x+``" is not possible."``); ` ` `  `} ` `} ` `// This code is contributed by ` `// Shashank_Sharma `

## Python3

 `# Python3 program to find if we can get given  ` `# sum using elements of the given array.  ` `def` `check(arr, N):  ` ` `  `    ``ispossible[``0``] ``=` `1` `    ``arr.sort()  ` ` `  `    ``for` `i ``in` `range``(``0``, N):  ` `        ``val ``=` `arr[i]  ` ` `  `        ``# if it is already possible  ` `        ``if` `ispossible[val]:  ` `            ``continue` ` `  `        ``# make 1 to all it's next elements  ` `        ``for` `j ``in` `range``(``0``, ``MAX` `-` `val):  ` `            ``if` `ispossible[j]:  ` `                ``ispossible[j ``+` `val] ``=` `1` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"``:  ` ` `  `    ``arr ``=` `[``2``, ``3``]  ` `    ``N ``=` `len``(arr)  ` `     `  `    ``# maximum size of x  ` `    ``MAX` `=` `1000` `     `  `    ``# to check whether x is possible or not  ` `    ``ispossible ``=` `[``0``] ``*` `MAX` ` `  `    ``check(arr, N)  ` `    ``x ``=` `7` `     `  `    ``if` `ispossible[x]:  ` `        ``print``(x, ``"is possible."``)  ` `    ``else``: ` `        ``print``(x, ``"is not possible."``)  ` `     `  `# This code is contributed by  ` `# Rituraj Jain `

## C#

 `// C# program to find if we can get given ` `// sum using elements of given array. ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `// to check whether x is possible or not ` `static` `int` `[]ispossible = ``new` `int``; ` `static` `void` `check(``int``[] arr, ``int` `N) ` `{ ` `     `  `    ``ispossible = 1; ` `    ``Array.Sort(arr); ` ` `  `    ``for` `(``int` `i = 0; i < N; ++i)  ` `    ``{ ` `        ``int` `val = arr[i]; ` ` `  `        ``// if it is already possible ` `        ``if` `(ispossible[val] == 1) ` `            ``continue``; ` ` `  `        ``// make 1 to all it's next elements ` `        ``for` `(``int` `j = 0; j + val < 1000; ++j) ` `            ``if` `(ispossible[j] == 1) ` `                ``ispossible[j + val] = 1; ` `    ``} ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main() ` `{ ` `    ``int``[] arr = { 2, 3 }; ` `    ``int` `N = arr.Length; ` `    ``check(arr, N); ` `    ``int` `x = 7; ` `    ``if` `(ispossible[x]== 1) ` `        ``Console.WriteLine(x + ``" is possible."``); ` `    ``else` `        ``Console.WriteLine(x + ``" is not possible."``); ` `} ` `} ` ` `  `// This code is contributed by ` `// Akanksha Rai `

## PHP

 ` `

Output:

```7 is possible.
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :