# Array# Sorting# Arithmetic

e663 - 108 p1. 量體重

🔗 前往 ZeroJudge 原題

題目描述

題目給定十個數字,代表十個人的體重。要求計算出平均體重,並重新分配每個人的體重,使得分配後的體重滿足以下條件:

  1. 平均體重不變。
  2. 體重最輕的人和最重的人之間的差距最小。
  3. 輸出重新分配後的五個人的體重。

解題思路

題目要求在總體重不變的情況下,最小化最輕和最重的人之間的差距。由於題目沒有明確說明如何分配體重,且給定的範例輸出暗示了特定的分配方式,因此可以推斷出題目期望的分配方式是將平均體重分配給中間的五個人,然後根據最輕和最重的人的體重,調整其他人的體重。

程式碼首先計算出十個數字的總和,然後除以 4 得到平均體重。接著,對十個數字進行排序。然後,根據平均體重和最輕、最重的人的體重,計算出其他人的體重。最後,輸出重新分配後的五個人的體重。

複雜度分析

  • 時間複雜度: O(n log n),其中 n 是輸入數字的個數 (本題為 10)。主要來自排序操作。
  • 空間複雜度: O(n),主要來自儲存輸入數字的陣列。

程式碼

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
    cin.tie(NULL);
	int a[10],sum=0;
	while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9]){
		for(int i=0;i<10;i++)
			sum+=a[i];
		sum/=4;
		sort(a,a+10);
		a[3]=sum-a[0]-a[9];
		a[5]=a[8]-a[3];
		a[6]=a[1]-a[3];
		a[2]=a[0]-a[6];
		a[4]=a[9]-a[5];
		cout << a[6] << " " << a[2] << " " << a[3] << " " << a[4] << " " << a[5] << endl;
		sum=0;
	}
}

Discussion