这里应用了快排加插排的方法,首先对所有果子排序,然后每找到一个新的果子堆的时候就插入到新形成的序列中,同时比他小的依次前移两位,比他大的依次前移一位。
#include<stdio.h>
#include<stdlib.h>
int a[10],n;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int i,s=0,j,x;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),cmp);//先对果子堆进行排序
while(1)
{
if(n==1)
break;
a[1]+=a[0];
x=a[1];
s+=a[1];//记录所需要的体力
i=2;
while(a[1]>a[i]&&i<n)
i++;
for(j=2;j<i;j++)//比新形成的果子堆小的依次前移两位
a[j-2]=a[j];
a[j-2]=x;//插入新的果子堆
for (j=j-1;j<n;j++)//比他大的依次前移一位
a[j]=a[j+1];
n--;//形成新的有序的序列
}
printf("%d\n",s);
return 0;
}