C语言如何一次性输入多组数据然后依次输出结果

这是题目要求:
令 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 
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]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--;
    }
    
}

我的想法是对每组的数据进行排序,然后由中间分开成前后两个小子集就行了,但是不能按题目要求一次性输入多组数据然后依次输出结果

该回答引用ChatGPT

您的代码已经实现了将每组数据排序,并将其分成前后两个小子集的功能。但是,如果需要按题目要求一次性输入多组数据,并依次输出结果,可以使用一个循环来实现,例如:


#include <stdio.h>

int main() {
    int m;
    scanf("%d", &m);  // 输入数据组数

    while (m--) {
        int n, i, j, t;
        scanf("%d", &n);  // 输入本组数据的元素个数

        int a[n];
        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);  // 输入本组数据
        }

        // 对本组数据进行排序
        for (i = 0; i < n - 1; i++) {
            for (j = 0; j < n - i - 1; j++) {
                if (a[j + 1] < a[j]) {
                    t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
        }

        // 将本组数据分成前后两个子集并输出
        for (i = 0; i < n / 2; i++) {
            printf("%d ", a[i]);
        }
        printf("\n");
        for (i = n / 2; i < n; i++) {
            printf("%d ", a[i]);
        }
        printf("\n\n");
    }

    return 0;
}