題目連結: https://zerojudge.tw/ShowProblem?problemid=d452
# 內容
老王在呈數線的星際大道中,已知,有 m 個物品在此星際大道,座標分別為 a1, a2, ..., am,請幫忙找出:老王在數線的那個位置 (老王在數線上,可以任意去),當在此位置時,到每一個物品的距離的此 m 個距離和最小為多少?
# 輸入
輸入檔中有多筆測試資料。每筆測試資料第一行有一個正整數 N, (1 ≦ N ≦ 100),代表有 N 筆測試資料。
接下來,有 N 行,每行有 m+1 個數字(1 ≦ m≦ 1000),如 m, a1, a2, ..., am ,每行的第一個字 m 表示有 m 個物品,a1, a2, ..., am為其座標。
# 輸出
對於每筆測資,輸出一行此筆資料的最小距離。
# 解題思路
用泡沫排序的方式排序找出中位數,再計算每個數與中位數的距離,輸出其總和
https://pjchender.blogspot.com/2017/09/bubble-sort.html
# 程式碼
#include<iostream> | |
#include<cmath> | |
using namespace std; | |
int main() | |
{ | |
int T,n; | |
while(cin>>T) | |
{ | |
for(int i=0;i<T;i++) | |
{ | |
cin>>n; | |
int arr[n],sum=0; | |
for(int j=0;j<n; j++) | |
cin>>arr[j]; | |
for(int j=0;j<n;j++) | |
{ | |
for(int k=0;k<n-j;k++) | |
{ | |
if(arr[k]>arr[k+1]) | |
swap(arr[k],arr[k+1]); | |
} | |
} | |
for(int j=0;j<n;j++) | |
sum+=abs(arr[n/2]-arr[j]); | |
cout << sum << endl; | |
} | |
} | |
return 0; | |
} |