这是题目要求:
令 S 为一个 n 个正整数的集合,n 为偶数。请设计一个有效算法将 S 分成两个子集 S1 和 S2,使每个子集中含有 n/2 个元素,而且 S1中所有元素的和与 S2中所有元素的和的差最大
输入:
2
22
68 25 34 16 2 37 3 95 76 57 21 13 4 78 29 6 17 39 51 20 43 12
26
28 3 48 59 14 32 47 51 42 61 9 24 52 78 65 2 37 78 51 73 29 7 26 95 37 2
输出:
2 3 4 6 12 13 16 17 20 21 25
29 34 37 39 43 51 57 68 76 78 95
2 2 3 7 9 14 24 26 28 29 32 37 37
42 47 48 51 51 52 59 61 62 65 73 78 95
这是我的代码:
```c
#include <stdio.h>
int main(){
int m=0;
scanf("%d\n",&m);
while(m>0){
int n,i,j,t=0;
scanf("%d\n",&n);
int a[n];
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(i=1;i<=n-1;i++){
for(j=1;j<=n-i;j++){
if(a[j+1]<a[j]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=1;i<=n/2;i++){
printf("%d ",a[i]);
}
printf("\n");
for(i=n/2+1;i<=n;i++){
printf("%d ",a[i]);
}
printf("\n");
printf("\n");
m--;
}
}
我的想法是对每组的数据进行排序,然后由中间分开成前后两个小子集就行了,但是不能按题目要求一次性输入多组数据然后依次输出结果