题意:两条虫之间碰在一起,质量变为2*sqrt(m1*m2)
求怎么结合,能使最后的一只虫质量最小
分析:如果让按从大到小的顺序依次结合,可以使大的数被开方的次数最多,得到的结果更小
4 3 2 1
3,4被开3次,2被开2次,1被开1次,只要按照公式来,一定有数分别被开3,3,2,1次,不过按照大的开更多次,能使得结果更小,不过我没算过...
#include<stdio.h>
#include<stdlib.h>
#include<math.h> int cmp(const void *a,const void *b)
{
return (*(int *)b-*(int *)a);
}
int main()
{
int a[],n,i;
float ans;
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
}
if(n==)
{
printf("%.3f\n",a[]*1.0);
return ;
}
qsort(a,n,sizeof(a[]),cmp);
ans=*sqrt(a[]*a[]*1.0);
for(i=;i<n;i++)
{
ans=*sqrt(ans*a[i]*1.0);
}
printf("%.3f\n",ans);
return ;
}
WA:没考虑只一个数的情况
技巧:在整数运算后*1.0,结果变成浮点数
for(i=;i<n;i++)
{
ans=*sqrt(ans*a[i]*1.0);
}