zerojudge f376. 芝麻街的團購

題目請參考 https://zerojudge.tw/ShowProblem?problemid=f376.

這題的答案就是在找一個數字V可以得到min(∑|ai-V|),i=1~n, 所以答案V就是ai的中位數.

我們只要先把數字ai排序好,找出中位數印出來就可以了.

        int n;
	scanf("%d",&n);

	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}

	//排序
	std::sort(a, a+n);
C++

須注意n是奇數或偶數時的中位數index不一樣,所以要分開處理.

	if(n&1){//n是奇數
		printf("%d",a[n/2]);
	}else{  //n是偶數
		printf("%d",a[n/2-1]);
	}
C++

完整程式如下,AC需時19ms.

#include <iostream>
#include <algorithm>
using namespace std;

int a[100000];

int main() {
	int n;
	scanf("%d",&n);

	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}

	//排序
	std::sort(a, a+n);

	if(n&1){//n是奇數
		printf("%d",a[n/2]);
	}else{  //n是偶數
		printf("%d",a[n/2-1]);
	}
	return 0;
}
C++

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *