题目大意:
化学生物学家发现了一种生物stripe。当2个stripe相撞的时候会合并成一个新的stripe。新stripe的重量等于2*sqrt(m1*m2),m1和m2是两个stripe撞之前的重量。化学生物学家想知道一些stripe相撞后重量最小是多少
解题思路:
贪心算法。先排个序,然后每次都选最大的两个数运算就好了
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int cmp(const void *x, const void *y)
{
if( *(double*)x > *(double*)y ) return 1;
return -1;
}
int main(void)
{
int N, i;
double num[101];
while(scanf("%d", &N) != EOF)
{
for(i = 0; i < N; i++)
scanf("%lf", &num[i]);
qsort(num, N, sizeof(double), cmp);
double t = num[N-1];
for(i = N - 2; i >= 0; i--)
t = 2*sqrt(t*num[i]);
printf("%.3lf\n", t);
}
return 0;
}
6336

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



