1042: 另一个简单游戏
时间限制: 1 Sec 内存限制: 128 MB提交: 108 解决: 25
[ 提交][ 状态][ 讨论版]
题目描述
现在有n个数,每次可以取出任意两个数x,y,然后加入一个数为(x+y)/2,问最后剩下的那个数最大是多少?
输入
有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T≤20)。
接下来为T组数据。
每组测试数据分2行:
第一行为n,表示有n个数(1≤n≤100)
接下来的一行有n个正整数ai,表示初始的n个数(1≤ai≤10000,1≤i≤n)。
输出
对于每组数据,在一行山上输出一个实数(保留两位小数),表示最后剩下数的可能的最大值。
样例输入
2
3
1 2 3
4
2 3 1 5
样例输出
2.25
3.63
思路:由于越到后面加的数字权重越大,故可以先从小到大排序,按题目要求运算;
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
double A[110];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%lf",&A[i]);
}
int i;
sort(A,A+n);
for( i=0;i<n-1;i++)
{
A[i+1]=(A[i]+A[i+1])/2;
}
printf("%.2f\n",A[i]+(1e-10));
}
return 0;
}