本題是典型的貪心算法:
假設有3個數字 a,b,c
想要S1<S1<S3最小的話,則a<b<c,所以大的數字先結合
代碼如下:
[cpp]
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
#define MAX 1000
void bubble_sort(int s[],int len)
{
bool flag=true;
for(int ii=len-1;ii>0&&flag;ii--)
{
flag=false;
for(int jj=0;jj<ii;jj++)
{
if(s[jj]>s[jj+1]) //冒泡法,小的數字冒到上面
{
int temp= s[jj];
s[jj]=s[jj+1];
s[jj+1] = temp;
flag=true; //如果有一次交換,說明還沒有排好;如果本次沒有進行調整,說明已經排序完成
}
}
}
}
int main()
{
int n;
int stripy[MAX];
memset(stripy,0,MAX*sizeof(int));
cout.precision(3);
cout.setf(ios::fixed);
while (cin>>n)
{
for (int ii=0;ii<n;ii++)
{
cin>>stripy[ii];
}
bubble_sort(stripy,n);
double newdata=stripy[n-1];
for(int ii=n-2;ii>=0;ii--)
{
newdata = 2*sqrt(newdata*stripy[ii]);
}
cout<<newdata<<endl;
}
return 0;
}