极客收集球我得到了答案但不能 return 我对主要的最终答案
Geek collects the balls I'm getting the answer but cannot return my final answer to main
有两条平行路,每条路分别包含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% 我只是不知道如何 return 我的期末考试总和回到主要。
我的代码和输出如下..
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 在 ELSE 中
总和:5
函数 1
Sum : 5 //This answer is returned to main..我不知道为什么..
函数 1 在 IF 中
总和:10
函数 1 在 IF 中
总和:17
函数 1 在 ELSE 中
总和:25
函数 2
总和:25
函数 2 在 ELSE 中
总和:34
函数 1
Sum : 34 //这个答案很完美
我得到的最终答案是 5
首先,递归中的 while 循环比较直观。使用递归,如果可以的话不要一会儿。
正如 M. Prokhorov 所说,如果你的最后一个 else
.
,你可能想影响 functionUse.array1(a2,b2,pos,sum);
的结果
可能 sum = functionUse.array1(a2,b2,pos,sum);
可以。
有两条平行路,每条路分别包含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% 我只是不知道如何 return 我的期末考试总和回到主要。 我的代码和输出如下..
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 在 ELSE 中 总和:5
函数 1 Sum : 5 //This answer is returned to main..我不知道为什么..
函数 1 在 IF 中 总和:10
函数 1 在 IF 中 总和:17
函数 1 在 ELSE 中 总和:25
函数 2 总和:25
函数 2 在 ELSE 中 总和:34
函数 1 Sum : 34 //这个答案很完美
我得到的最终答案是 5
首先,递归中的 while 循环比较直观。使用递归,如果可以的话不要一会儿。
正如 M. Prokhorov 所说,如果你的最后一个 else
.
functionUse.array1(a2,b2,pos,sum);
的结果
可能 sum = functionUse.array1(a2,b2,pos,sum);
可以。