目的:一堆绳段,组成最长绳子。
输入:
N 绳段条数
N个整数
输出:
输出最长的长度,向下取整。
算法:
短的先加,折半的就少,把长的留在最后。因此用vector,并且排序。
#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int N;//绳子段的长度
vector<int> v;
int main()
{
scanf("%d",&N);
v.resize(N);
for(int i=0;i<N;i++)
{
scanf("%d",&v[i]);
}
sort(v.begin(),v.end());
double ans;
ans = v[0];
for(int i=1;i<N;i++)
{
ans = (ans+v[i])/2;
}
printf("%d",(int)ans);
return 0;
}
本文介绍了一种通过将较短的绳段优先合并来形成最长绳子的算法。使用vector存储绳段长度并进行排序,确保每次合并最短的两段绳子,最终输出整数形式的最长绳子长度。
2467

被折叠的 条评论
为什么被折叠?



