12 June 2018

print all possiblites to divide the array into two whose sum become same

i.p:
ar[]={3,4,2,9,6,8,1}

o/p:
3 4 9
2 6 8
1 2 4 9
1 6 9
1 3 4 8


(print in sorted order)
(all sum become 16) 

using subarray & sort

import java.util.*;
public class NewClass6 {
   
    void print(int d[],int c)
    {
        for(int i=0;i<c;i++)
            System.out.print(d[i]+" ");
        System.out.println();
    }
   
    void sort(int d[],int c)
    {
        for(int i=0;i<c;i++)
        {
            for(int j=i+1;j<c;j++)
            {
                if(d[i]>d[j])
                {
                    d[i]=d[i]+d[j];
                    d[j]=d[i]-d[j];
                    d[i]=d[i]-d[j];
                }
            }
        }
    }
   
    void subarray(int ar[],int avg)
    {
       int k=0;
        for(int i=1;i<(1<<ar.length);i++)
        {     int d[]=new int[ar.length],min=-1;
            int itr=i,index=0,c=0,sum=0;
            while(itr>0)
            {    if(itr%2!=0)
                {
                sum+=ar[index];
                d[c++]=ar[index];
                }
                itr=itr>>1;
                index++;
            }
            if(ar.length%2==0){ //even length
            if(sum==avg && c==ar.length/2 ){
                sort(d,c);
              print(d,c);}
            }else    //for odd length
            {
               if(sum==avg && c==ar.length/2 || sum==avg && c==(ar.length+1)/2){
                   sort(d,c);
              print(d,c);}
            }
           
        }
    }
   
   
public static void main(String args[])
    {
        int ar[]={3,4,2,9,6,8,1},sum=0;
        NewClass6 ob=new NewClass6();
        for(int i=0;i<ar.length;i++)
            sum+=ar[i];
        sum=sum/2;
        ob.subarray(ar,sum);
    }
}

No comments:

Post a Comment