
程序代码:
#include <stdio.h>
#include <stdlib.h>
FILE *fin,*fout;
void print(int fruit[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",fruit[i]);
printf("\n");
}
void Qsort(int fruit[],int startPos, int endPos)
{
int i,j,temp;
temp=fruit[startPos];
i=startPos; j=endPos;
while(i<j)
{
while(fruit[j]<=temp && i<j)--j;
fruit[i]=fruit[j];
while(fruit[i]>=temp && i<j)++i;
fruit[j]=fruit[i];
}
fruit[i]=temp;
if(i-1>startPos) Qsort(fruit,startPos,i-1);
if(endPos>i+1) Qsort(fruit,i+1,endPos);
}
int main()
{
int fruit[10000]={0},n,i,ans=0,temp=0;
fin=fopen("fruit.in","r");
fout=fopen("fruit.out","w");
fscanf(fin,"%d",&n);
for(i=0;i<n;i++)
fscanf(fin,"%d",&fruit[i]);
Qsort(fruit,0,n-1); //假如endpos是数组的最后一个的话,是n-1,用不着length了
//print(fruit,n); //加上看下排序结果,下同
for(i=n-1;i>0;i--) //因为排序的顺序反了,所以从后面开始算起
{
temp=fruit[i]+fruit[i-1];
ans=ans+temp;
fruit[i]=0; //合并完归0好一点
fruit[i-1]=temp;
Qsort(fruit,0,n-1); //n的话数组会越界的,上面一处相同
}
fprintf(fout,"%d",ans);
system("pause");
return 0;
}
给个最新代码: