zoj1543

来源:互联网 发布:seo行业前景 编辑:程序博客网 时间:2024/06/03 20:01

题目大意:

化学生物学家发现了一种生物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;}
0 0