Related Articles

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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find if we can get given
// sum using elements of given array.
#include <bits/stdc++.h>
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[0] = 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[0]);
    check(arr, N);
    int x = 7;
    if (ispossible[x])
        cout << x << " is possible.";
    else
        cout << x << " is not possible.";
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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[1000];
static void check(int[] arr, int N)
{
      
    ispossible[0] = 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find if we can get given
// sum using elements of given array.
  
// maximum size of x
$MAX = 1000;
  
// to check whether x is possible or not
$ispossible[$MAX] = array();
  
function check($arr, $N)
{
    global $MAX;
    $ispossible[0] = 1;
    sort($arr, 0);
  
    for ($i = 0; $i < $N; ++$i)
    {
        $val = $arr[$i];
  
        // if it is already possible
        if ($ispossible[$val])
            continue;
  
        // make 1 to all it's next elements
        for ($j = 0; $j + $val < $MAX; ++$j)
            if ($ispossible[$j])
                $ispossible[$j + $val] = 1;
    }
}
  
// Driver code
$arr = array( 2, 3 );
$N = sizeof($arr);
check($arr, $N);
$x = 7;
if (ispossible[$x])
    echo $x . " is possible.";
else
    echo $x . " is not possible.";
  
// This code is contributed 
// by Akanksha Rai
?>

chevron_right


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 :