思路:这题和矩阵转置有一点联系,它们两两相加得到的N*(N-1)/2个和,其实就是矩阵的上三角或下三角,这一点解决了,再来个qsort就搞定啦!
还有注意数组的大小!(我在这栽跟头了)
#include<stdio.h> #include<stdlib.h> int comp(const void *a,const void *b) { return *(int *)b-*(int *)a; } int a[3005],c[5000000];//注意数组的大小! int main() { int n,m,i,j,k; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); k=0; for(i=0;i<n;i++)//求和 for(j=0;j<n;j++) { if(i<j) { c[k]=a[i]+a[j]; k++; } } qsort(c,k,sizeof(int),comp); for(i=0;i<m-1;i++) printf("%d ",c[i]); printf("%d\n",c[m-1]); } return 0; }