mo_on 发表于 2023-5-8 17:00:11

c语言作业求助

【问题描述】

编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。
【输入形式】

用户在第一行输入第一个有序数组的元素数目,以回车结束此输入。然后在第二行按照刚才输入的元素数目依次输入数组元素,中间用空格分隔,最后用回车结束输入。第三行和第四行只需重复刚才的步骤,将第二个有序数组也输入即可。输入时候一定是有序输入的,即数组元素已经按照从小到大顺序排列。
【输出形式】

程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出。每个元素输出时用空格分隔,最后一个输出之后没有空格。
【样例输入】

6
2 5 8 11 20 35
4
1 6 15 60
【样例输出】

1 2 5 6 8 11 15 20 35 60
【样例说明】

第一行输入为第一个有序数组的元素数目,第二行为有序数组元素;第三行为第二个有序数组的元素数目,第四行为有序数组元素。

求大神帮忙!!!

isdkz 发表于 2023-5-8 17:01:00

以下是C语言的代码实现:

#include <stdio.h>

int main() {
    int n1, n2, i, j, k;
    int a, b, c;

    // 输入第一个有序数组
    scanf("%d", &n1);
    for (i = 0; i < n1; i++) {
      scanf("%d", &a);
    }

    // 输入第二个有序数组
    scanf("%d", &n2);
    for (i = 0; i < n2; i++) {
      scanf("%d", &b);
    }

    // 归并两个有序数组
    i = j = k = 0;
    while (i < n1 && j < n2) {
      if (a < b) {
            c = a;
      } else {
            c = b;
      }
    }
    while (i < n1) {
      c = a;
    }
    while (j < n2) {
      c = b;
    }

    // 输出归并后的有序数组
    for (i = 0; i < k; i++) {
      printf("%d", c);
      if (i != k - 1) {
            printf(" ");
      }
    }

    return 0;
}


首先,我们定义了三个数组, a 、 b 用来存放输入的两个有序数组, c 用来存放归并后的有序数组。

然后,我们按照题目要求输入两个有序数组。

接着,我们使用归并排序的思想,从头开始比较 a 和 b 的元素,将较小的元素存入 c 中,并将其所在数组的下标向后移动一位。重复这个过程,直到其中一个数组的所有元素都被归并到 c 中。最后,将剩余的元素直接存入 c 中。

最后,我们按照题目要求输出归并后的有序数组。
页: [1]
查看完整版本: c语言作业求助