输入:
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