Friday, 10 February 2012

[Amazon Interview]: Finding the all possible sets.!!!

Q. Given an array of positive integers, find all possible sets that sum up to a given value K.

Here is my code..


#include<stdio.h>
#include<conio.h>
#define N 10
#define INF 12345678 //ignore
#define max(a,b) a>b?a:b

int M[1000][100];
int a[N+1]={INF,1,2,3,4,5,6,7,8,9,10};
 
void print(int i, int j,int *arr, int k)
{
     if(i<0)
      return;
     
     if(j==0)
     {
             int idx;
           
             for(idx=0;idx<k;idx++)
              printf("%d  ",arr[idx]);
              printf("\n");
              return;
     }
   
     if(j>=a[i])
     { if(M[i-1][j-a[i]])
       { arr[k]=a[i];
         print(i-1,j-a[i],arr,k+1);
       }
     }
   
     if(M[i-1][j])
      print(i-1,j,arr,k);
}

int main()
{
    int i,j,k,K=10;
    int arr[1000];
   
    for(i=0;i<=N;i++)
     M[i][0]=1;
   
    for(k=1;k<=K;k++)
     M[0][k]=0;
   
    for(i=1;i<=N;i++)
     for(k=1;k<=K;k++)
      M[i][k]=max(M[i-1][k-a[i]],M[i-1][k]);
     
    print(N,K,arr,0);
    getch();
    return(0);
}

No comments:

Post a Comment