题意:中文的题目= =将各种组合可能得到的和作为下标,然后因为不同组合得到的和可能是一样的,
所以再用一个数组num[]数组,就可以将相同的和都记录下来
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<algorithm>
using namespace std; typedef long long LL;
int hash[],a[],num[]; int main()
{
int n,m,i,j,k;
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(hash,,sizeof(hash));
memset(num,,sizeof(num));
for(i=;i<=n;i++) cin>>a[i]; for(i=;i<=n;i++){
for(j=i+;j<=n;j++)
hash[a[i]+a[j]]++;//将各种相加可能出现的数作为下标
} for(i=,k=;k<m;i--){
while(hash[i]--) num[k++]=i;
} for(i=;i<m;i++){
if(i!=m-) printf("%d ",num[i]);
else printf("%d",num[i]);
}
printf("\n");
}
return ;
}