?為了解新學(xué)期學(xué)生暴漲的問(wèn)題,小樂(lè)村要建立所新學(xué)校,考慮到學(xué)生上學(xué)安全問(wèn)題,需要所有學(xué)生家到學(xué)校的距離最短。
?假設(shè)學(xué)校和所有學(xué)生家都走在一條直線(xiàn)之上,請(qǐng)問(wèn)學(xué)校建立在什么位置,能使得到學(xué)校到各個(gè)學(xué)生家的距離和最短。
?輸入描述:
??第一行: 整數(shù) n 取值范圍 [1, 1000],表示有n戶(hù)家庭。
??第二行: 一組整數(shù) m 取值范圍 [0, 10000] ,表示每戶(hù)家庭的位置,所有家庭的位置都不相同。
?輸出描述:一個(gè)整數(shù),確定的學(xué)校的位置。如果有多個(gè)位置,則輸出最小的。
暴力
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int[] people = new int[number];
for(int i = 0;i < number;i++){
people[i] = sc.nextInt();
}
//number取多少時(shí) number坐標(biāo)的差
int[][] dp = new int[number][number];
//計(jì)算每個(gè)坐標(biāo)距離
for(int i = 0;i < number;i++){
for(int j = 0;j < number;j++){
dp[i][j] = Math.abs(people[i] - people[j]);
}
}
int min = Integer.MAX_VALUE;
int res = 0;
for(int i = 0;i < number;i++){
int tempMin = 0;
for(int j = 0;j < number;j++){
tempMin += dp[i][j];
}
if(min > tempMin){
res = people[i];
min = tempMin;
}else if(tempMin == min){
res = Math.min(res,people[i]);
}
}
System.out.print(res);
}
}
選中位數(shù)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int[] people = new int[number];
for(int i = 0;i < number;i++){
people[i] = sc.nextInt();
}
// 對(duì)數(shù)組進(jìn)行排序
Arrays.sort(people);
// 對(duì)數(shù)組排好序
// 若n為奇數(shù),則為 people[n / 2],就中位數(shù),中間一定到兩邊最小
// 若n為偶數(shù),則為 people[n / 2 - 1],選靠左的元素,省略中間兩個(gè)點(diǎn),其它點(diǎn)的距離都是固定長(zhǎng)度,中間相向,同時(shí)又是輸出最小的
if(number % 2 != 0){
//5選第三個(gè)位置,索引2
System.out.println(people[number / 2]);
}else{
//5選第二個(gè)位置,索引1
System.out.println(people[number / 2 - 1]);
}
}
}