两组升序排列的数组A[m]和B[n], 求他们的中位数。
注意,中位数的概念哦~相信你会百度一下的~
格式:
第一行输入数字m,接下来一行输入数组A[m], 第三行输入数字n,第四行输入数组B[n],接下来输出中位数。两个数组的长度都不超过1000。
注意,需要保留5位小数哦~所以,你设计函数的时候请设计成double类型哦~
1 3 5 1 2 4 5 6
3.50000
package jsk;
import java.util.Scanner;
public class Main23 {
private static Scanner input;
public static void main(String[] args) {
//两组升序排列的数组A[m]和B[n],求他们的中位数
input = new Scanner(System.in);
int m = input.nextInt();
int [] array1 =new int[m];
init(array1);
int n = input.nextInt();
int [] array2 = new int[n];
init(array2);
//把这两个数组合并起来
mearge(array1,array2);
}
private static void init(int [] array) {
for (int i =0;i<array.length;i++) {
array[i] = input.nextInt();
}
}
public static void mearge(int[]array1,int[]array2){
int p1 = array1.length-1;
int p2 = array2.length-1;
//循环遍历array1,array2,然后合并起来
int newLength = array1.length+array2.length-1;
int [] newArray = new int[newLength+1];
while (p1 >= 0 && p2 >= 0) {//二者长度相等部分
if (array1[p1] >= array2[p2]) {
newArray[newLength] = array1[p1];
p1--;
newLength--;
} else {
newArray[newLength] = array2[p2];
newLength--;
p2--;
}
}
//假设a数组多出来
while (p1 >=0) {
newArray[newLength] = array1[p1];
newLength--;
p1--;
}
//假设b数组多出来
while (p2 >=0) {
newArray[newLength] = array2[p2];
newLength--;
p2--;
}
//求中位数,如果这这个中位数是奇数的,直接取中间的数,如果是偶数的话取中间减一,加一两个数的平均数
if (newArray.length%2 == 1) {
System.out.println(newArray[newArray.length/2+1]);
}else{
int number1 = newArray[newArray.length/2];
int number2 = newArray[newArray.length/2-1];
System.out.printf("%.5f",(double)(number1+number2)/2);
}
}
}
原文:http://www.cnblogs.com/airycode/p/5808837.html