wuhao_2010 2010-10-02 06:11:00
点我顶贴
收藏
删除
#include<stdio.h>
#include<stdlib.h>
int comp(const void *p1,const void *p2)
{
return *((int *)p1)-*((int *)p2);
}
int main()
{
int i,n,j,a[10001]={0},s=0,t;
scanf("%d",&n);
for(i=0;i<=n-1;i++) scanf("%d",&a[i]);
qsort(a,n,sizeof(int),comp);
for(i=0;i<=n-2;i++)
{
a[i+1]=a[i]+a[i+1];
s+=a[i+1];
for(j=i+1;j<=n-2;j++) if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
printf("%d",s);
return 0;
}
每次合并前两个数,然后放到后一个数原有位置上。不管前面无用的数据,有用部分除第一个外是递增的,很EASY.