【问题标题】:Geek collects the balls I'm getting the answer but cannot return my final answer to main极客收集我得到答案的球,但无法将我的最终答案返回给主
【发布时间】:2017-09-15 14:09:34
【问题描述】:

有两条平行的道路,每条道路分别包含 N 和 M 个桶。每个桶可能包含一些球。两条道路上的水桶以这样一种方式保存,即根据其中的球数对它们进行分类。极客从具有较少球数的桶的道路尽头开始(即,如果桶按升序排序,则极客将从道路左侧开始)。 极客只能在交叉点改变道路(这意味着,在两条道路上具有相同数量的球的桶)。现在你需要帮助 Geek 收集最大数量的球。

输入:

1

5 5

1 4 5 6 8

2 3 4 6 9

输出: 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[]arr1={4,5,7,8,9};

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


我的输出如下

功能 2 总和:0

函数 2 在 IF 内 总和:1

函数 2 INSIDE ELSE 总和:5

功能 1 Sum : 5 //这个答案返回给main..我不知道为什么..

函数 1 在 IF 内 总和:10

函数 1 在 IF 内 总和:17

函数 1 INSIDE ELSE 总和:25

功能 2 总和:25

函数 2 INSIDE ELSE 总和:34

功能 1 Sum : 34 //这个答案很完美

我得到的最终答案是 5

【问题讨论】:

  • 他们教过你调试吗?它可以帮助您了解程序的作用。
  • 你正在调用functionUser.array1,它应该返回一些东西,但是你忽略它返回的任何东西。这就是为什么你得到你所得到的。还要考虑另一种代码格式样式,它确实对理解代码有很大帮助。

标签: java algorithm dynamic amazon-s3 zoho


【解决方案1】:

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

正如 M. Prokhorov 所说,如果您的最后一个 else,您可能希望影响 functionUse.array1(a2,b2,pos,sum); 的结果。

可能sum = functionUse.array1(a2,b2,pos,sum); 可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多