Fno. 2023-02-27 00:18 采纳率: 50%
浏览 86

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 <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--;
    }
    
}

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

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-27 09:24
    关注

    该回答引用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;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月27日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)