我有一些工作需要处理从两个数组中添加数字的问题。例如,如果输入是这样的:
array1
202 167 178 18
array2
467 15 98 3
程序会将它们配对在一起,在这种情况下,较大的数字会覆盖较小的数字,使它们无关紧要。然后它将所有大数字相加以获得总和。我已经解决了如何找到最小的总和,但最大的数额似乎要难得多。如上例所示,结果将是
467+202+167+178=1014
因为它们是四个最大的数字。(一对467与18,和202/167/178与其余任何一个) 我想过像
这样的东西for(int n=numberofnumbers-1;n>n/2;n-=1)
{
if(array1[n]>=array2[n])
{
anotherarray[n]=array1[n];
}
else
{
anotherarray[n]=array2[n];
}
}
但它会多次使用一个数字,输出结果不正确。我需要一些帮助才能让它按照我想要的方式运作。
编辑:所需的输入:
array1
202 167 178 18
array2
467 15 98 3
期望的输出:
1014
我的非工作计划得到了什么:
1338
编辑2:数字从另一种方法排序。
编辑3:在看了一些建议之后,我想出了这个:
private int[] sorting(int[] dspeed,int[] pspeed)
{
int[] answer=new int[dspeed.length+pspeed.length];
int i=0, j=0, k=0;
while(i<dspeed.length&&j<pspeed.length)
answer[k++]=dspeed[i]<pspeed[j] ? dspeed[i++] : pspeed[j++];
while(i<dspeed.length)
answer[k++]=dspeed[i++];
while(j<pspeed.length)
answer[k++]=pspeed[j++];
return answer;
}
假设array1是dspeed而array2是pspeed,还有
final int[] ddspeed=sorting(dspeed, pspeed);
int answer=0;
for(int x=length-1;x>length/2;x--)
{
answer+=ddspeed[x];
}
System.out.println(answer);
break;
然而,我会得到没有意义的答案。 示例输入:
array1
1 2
array2
1 2
输出
0
答案 0 :(得分:1)
最简单的方法是合并两个数组,对数组进行排序,然后添加数组的最后四个元素。显然,有更好的方法可以做到这一点,但因为我坚持你能理解的最简单的方法。 像这样:
import java.util.Arrays;
class Main {
public static void main(String[] args) {
int[] arr1 = { 202, 167, 178, 18 };
int[] arr2 = { 467, 15, 98, 3 };
int[] arr3 = new int[arr1.length+arr2.length];
for(int i=0;i<arr1.length;i++)
arr3[i]=arr1[i];
for(int i=0;i<arr2.length;i++)
arr3[arr1.length+i]=arr2[i];
Arrays.sort(arr3);
int len = arr3.length;
int sum = arr3[len-1]+ arr3[len-2]+ arr3[len-3]+ arr3[len-4];
System.out.println(sum);
}
}
您明白了,您可以根据自己的要求进行修改。
答案 1 :(得分:0)
看看这段代码:
sum_max=0;
for(int n=0; n<array1.length; n++)
{
if(array1[n]>=array2[n])
{
n_max=array1[n];
}
else
{
n_max=array2[n];
}
sum_max += n_max;
}
即使我实际上没有测试它,我认为它应该做你想要的。
或者如果你想要它更短一些:
sum_max=0;
for(int n=0; n<array1.length; n++)
{
n_max = (array1[n]>=array2[n]) ? array1[n] : array2[n];
sum_max += n_max;
}
答案 2 :(得分:0)
如果我理解正确,规则如下:
这意味着你想要使用每个数组中最大的数字求和。最简单的方法是对两个数组进行排序,一个是升序,一个是降序。现在按索引位置配对。
在Java中,对提升的基元数组进行排序很容易。只需使用Arrays.sort()
。
没有用于排序降序的方法,所以你可以对数组进行升序和反向排序,但也没有方法,尽管为此编写方法很容易。
我们只是按相反的顺序配对数字。
private static int highestSum(int[] array1, int[] array2) {
if (array1.length != array2.length)
throw new IllegalArgumentException();
Arrays.sort(array1);
Arrays.sort(array2);
int sum = 0;
for (int i = 0; i < array1.length; i++) {
int value1 = array1[i];
int value2 = array2[array2.length - i - 1];
int max = Math.max(value1, value2);
sum += max;
}
return sum;
}
测试
System.out.println(highestSum(new int[] { 202, 167, 178, 18, },
new int[] { 467, 15, 98, 3, }));
输出
1014
答案 3 :(得分:0)
Juust另一个方法:对两个数组进行排序。比较两个数组中的最大数字并将其作为总和。继续这个没有选择的元素,直到你有你的对。
sum_max=0;
Arrays.sort(arr1);
Arrays.sort(arr2);
n1=array1.length-1;
n2=n1;
count=n1;
while(count>=0)
{
if(array1[n1]>=array2[n2])
{
n_max=array1[n1];
n1--;
}
else
{
n_max=array2[n2];
n2--;
}
sum_max += n_max;
count--;
}