1. 程式人生 > >PAT-乙-1070 1070 結繩 (25 分)

PAT-乙-1070 1070 結繩 (25 分)

在這裡插入圖片描述

程式碼

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	
	int n;
	cin>>n;
	double a[n];
	
	for(int i=0; i<n; i++){
		cin>>a[i];
	}
	
	sort(a, a+n);
	
	for(int i=0; i<n; i++){
		int tmp1 = a[i];
		int tmp2 = a[i+1];
		a[i+1] = (tmp1+tmp2)/2;
	}
	
	cout<<(int)a[n-1]<<endl;

	return 0;
}

註解

1、準確理解題目意思是關鍵。對摺後成為另一條繩子,所以長度減半。要想繩子最終長度最大,等價於將繩子長度排序,從小到大依次折半(這樣才能使損失的長度最小),最終得到的繩子是最大長度的。

結果

在這裡插入圖片描述