0

以下のプログラムは、要素が「|」で区切られているサブセットを表示する必要があります。ここでは、静的な文字列配列の割り当てを使用しています。ただし、配列サイズ > 19 の出力は表示されません。例外をスローしませんでした。これを解決するには?

class kkk
{
        static int set[]={3,4,9,14,15,19,28,37,47,50,54,56,59,61,70,73,78,81,92,95,97,99};
        static int arr_size=(int)Math.pow((double)2,(double)set.length);
        static String []abc=new String[arr_size+10];
        static String wwf="";
        static void subset(int x)
        {
            if(abc[0].equals("END"))
            {
                abc[0]=""+x;
            }
            else
            {
                int i,len=0,count=0;
                for(i=0;i<abc.length;i++)
                {
                    if(!abc[i].equals("END")){len=len+1;}
                }
                count=len;
                wwf="";
                for(i=0;i<len;i++)
                {
                    wwf=abc[i];
                    wwf=wwf+"|"+x;
                    abc[count]=wwf;
                    count++;
                }
                abc[count]=""+x;
            }
        }
        static void sub()
        {
            int len=set.length,i;
            for(i=0;i<len;i++)
            {
                subset(set[i]);
            }
            int count=0;
            for(i=0;i<abc.length;i++)
            {
                System.out.println("count:"+count+++"-----"+abc[i]);
            }
        }
        public static void main(String args[])
        {
            for(int i=0;i<abc.length;i++)
            {
                abc[i]="END";
            }
            sub(); 
        }
    }

Ivanovic の場合: 次のプログラムの出力は何ですか?

class kkk
    {
        static int  valid_subset()
        {
            int count=0,len=abc.length,subset_count=0;
            for(int i=0;i<len;i++)
            {
                if(!abc[i].equals("END"))
                {
                    count=count+1;
                }
            }
            String www="";
            for(int i=0;i<count;i++)
            {
                int temp_large=0,sum=0,x=0;

                www=abc[i];
                String fgr="";
                for(int j=0;j<www.length();j++)
                {
                    if(!(""+www.charAt(j)).equals("|"))
                    {
                        fgr=fgr+www.charAt(j);
                        x=Integer.parseInt(fgr);
                    }
                    else
                    {
                        if(x>temp_large)
                        {
                            temp_large=x;
                        }
                        fgr="";
                    }
                }
                if(x>temp_large)
                {
                    temp_large=x;
                }
                fgr="";
                for(int j=0;j<www.length();j++)
                {
                    if(!(""+www.charAt(j)).equals("|"))
                    {
                        fgr=fgr+www.charAt(j);
                        x=Integer.parseInt(fgr);
                    }
                    else
                    {
                        if(x!=temp_large)
                        {
                            sum=sum+x;
                        }
                        fgr="";
                    }
                }
                if(x!=temp_large)
                {
                    sum=sum+x;
                }
                if(temp_large==sum)
                {
                    subset_count=subset_count+1;
                }
            }
            return subset_count;
        }
        static int set[]={3,4,9,14,15,19,28,37,47,50,54,56,59,61,70,73,78,81,92,95,97,99};
        static int arr_size=(int)Math.pow((double)2,(double)set.length);
        static String []abc=new String[arr_size+10];
        static String wwf="";
        static void subset(int x)
        {
            if(abc[0].equals("END"))
            {
                abc[0]=""+x;
            }
            else
            {
                int i,len=0,count=0;
                for(i=0;i<abc.length;i++)
                {
                    if(!abc[i].equals("END")){len=len+1;}
                }
                count=len;
                wwf="";
                for(i=0;i<len;i++)
                {
                    wwf=abc[i];
                    wwf=wwf+"|"+x;
                    abc[count]=wwf;
                    count++;
                }
                abc[count]=""+x;
            }
        }
        static void sub()
        {
            int len=set.length,i;
            for(i=0;i<len;i++)
            {
                subset(set[i]);
            }
            /*int count=0;
            for(i=0;i<abc.length;i++)
            {
                System.out.println("count:"+count+++"-----"+abc[i]);
            }*/
        }
        public static void main(String args[])
        {
            for(int i=0;i<abc.length;i++)
            {
                abc[i]="END";
            }
            sub(); 
            System.out.println(valid_subset());
        }
    }
4

1 に答える 1

0

i をループしていますが、28 行目の式で i を使用していません。

28 行目を次のように変更します。

if(!abc[0].equals("END")){len=len+1;}

if(!abc[i].equals("END")){len=len+1;}
于 2012-11-27T13:22:50.590 に答える