讨论 / 用个qsort+1重循环冒泡26行就够了 cpp
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.

查看更多回复
提交回复