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