给定?段?段的绳?,你需要把它们串成?条绳。每次串连的时候,是把两段绳?对折,再如下图所示套接在?起。这样得到的绳??被当成是另?段绳?,可以再次对折去跟另?段绳?串连。每次串
连后,原来两段绳?的?度就会减半。
给定N段绳?的?度,你需要找出它们能串成的绳?的最??度。
输?格式:
每个输?包含1个测试?例。每个测试?例第1?给出正整数N (2<=N<=10^4);第2?给出N个正整数,即原始绳段的?度,数字间以空格分隔。所有整数都不超过104。
输出格式:
在??中输出能够串成的绳?的最??度。结果向下取整,即取为不超过最??度的最近整数。
输?样例:
8
10 15 12 3 4 13 1 15
输出样例:
14
已知一系列线段,两两衔接长度折半,求所有线段组成最长绳子的长度
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main(int argc,char *argv[]) {
int N;
scanf("%d",&N);
int arr[N]={0};
for(int i=0; i<N; i++) {
scanf("%d", &arr[i]);
}
sort(arr,arr+N);
// double L=0.0; //不能从0开始,因为arr[0]要和arr[1]结合折叠,而不是0和arr[0]折叠
double L=arr[0];
for(int i=0; i<N; i++) {
L=(L+arr[i])/2.0;
}
printf("%d",(int)floor(L));
return 0;
}
原文:https://www.cnblogs.com/houzm/p/12245703.html