代码之家  ›  专栏  ›  技术社区  ›  Abdul Khader

极客收集球,我正在得到答案,但无法将最终答案返回给main

  •  -1
  • Abdul Khader  · 技术社区  · 8 年前

    输入:

    1 4 5 6 8

    输出: 29

    最大和路径为(2,3,4)5,6。[]中的整数是第一条路的桶,而()中的整数是第二条路的桶。所以,极客可以收集的最大球数是29。


    我已经解决了这个问题,但递归到两个函数中,我是java的初学者,我已经解决了几乎99%,我只是不知道如何将最终的总和返回到main。 我的代码和输出如下。。

        public class functionUse {
         public static int array1(int []a,int[] b,int pos,int sum)
         {
        System.out.println("FUNCTION 1");
        System.out.println("Sum : "+sum); 
    
    
        int i=pos,flag=0,rep=0;
        while(rep==0&&i<a.length) 
        {
        for( int j=0;j<a.length;j++)
        {
            flag=0;
            if(a[i]==b[j]&&b[j]!=0)
            {
                flag=1;
                rep=1;
                pos=j+1;
                b[j]=0;
                break;
            }
    
        }
        if(flag==0)
        {
    
            System.out.println("FUNCTION 1 INSIDE IF "); 
            sum=sum+a[i];
            System.out.println("Sum : "+sum); 
            i++;
        }
        else
        {
            sum=sum+a[i];
            System.out.println("FUNCTION 1 INSIDE ELSE "); 
            System.out.println("Sum : "+sum); 
            functionUse.array2(a,b,pos,sum);
        }
        }
        return sum;
    }
    public static int array2(int[]a2,int[] b2,int pos,int sum)
    {
        System.out.println("FUNCTION 2"); 
        System.out.println("Sum : "+sum); 
    
    
        int i=pos,flag=0,rep=0;
        while (rep==0&&i<a2.length)
        {
        for(int j=0;j<a2.length;j++)
        {
            flag=0;
            if(b2[i]==a2[j]&&a2[j]!=0)
            {
                flag=1;
                pos=j+1;
                rep=1;
                a2[j]=0;
                break;
            }
    
        }
        if(flag==0)
        {
            System.out.println("FUNCTION 2 INSIDE IF "); 
            sum=sum+b2[i];
            System.out.println("Sum : "+sum); 
            i++;
    
        }
        else
        {
            sum=sum+b2[i];
            System.out.println("FUNCTION 2 INSIDE ELSE "); 
            System.out.println("Sum : "+sum); 
    
            functionUse.array1(a2,b2,pos,sum);
        }
        }
    
        return sum;
    

    public static void main(String[] args) {
       int[]arr1={4,5,7,8,9};
       int[] arr2= {1,4,6,8,9};
       int sum1=0;
       int sum2=0;
       int lowest;
       int pos=0;
       int sum=0;
       for(int i=0;i<arr1.length;i++)
       {
           sum1 = sum1+arr1[i];
           sum2 = sum2+arr2[i];
    
       }
       lowest = Math.min(sum1, sum2);
         if(lowest==sum1)
         {
            System.out.println(functionUse.array1(arr1,arr2,pos,sum)); 
         }
         else
         {
             System.out.println(functionUse.array2(arr1,arr2,pos,sum));         
             }
    

    } }


    对于此输入

    int[]arr2={1,4,6,8,9};


    我的输出如下

    IF内的功能2

    功能2内部ELSE 总和:5

    IF内的功能1 总和:10

    IF内的功能1

    功能1内部ELSE

    功能2 总和:25

    功能2内部ELSE 总计:34

    功能1 总结:34//

    我得到的最终答案是5

    1 回复  |  直到 8 年前
        1
  •  0
  •   JFPicard    8 年前

    首先,递归中的while循环有点直观。如果可以的话,请使用递归。

    正如普罗霍罗夫所说,你可能想影响 functionUse.array1(a2,b2,pos,sum); else .

    可能 sum = functionUse.array1(a2,b2,pos,sum); 我会的。