鱼C论坛

 找回密码
 立即注册
查看: 1645|回复: 1

[已解决]c语言作业求助

[复制链接]
发表于 2023-5-8 17:00:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
【问题描述】

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

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

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

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

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

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

求大神帮忙!!!
最佳答案
2023-5-8 17:01:00
以下是C语言的代码实现:

  1. #include <stdio.h>

  2. int main() {
  3.     int n1, n2, i, j, k;
  4.     int a[100], b[100], c[200];

  5.     // 输入第一个有序数组
  6.     scanf("%d", &n1);
  7.     for (i = 0; i < n1; i++) {
  8.         scanf("%d", &a[i]);
  9.     }

  10.     // 输入第二个有序数组
  11.     scanf("%d", &n2);
  12.     for (i = 0; i < n2; i++) {
  13.         scanf("%d", &b[i]);
  14.     }

  15.     // 归并两个有序数组
  16.     i = j = k = 0;
  17.     while (i < n1 && j < n2) {
  18.         if (a[i] < b[j]) {
  19.             c[k++] = a[i++];
  20.         } else {
  21.             c[k++] = b[j++];
  22.         }
  23.     }
  24.     while (i < n1) {
  25.         c[k++] = a[i++];
  26.     }
  27.     while (j < n2) {
  28.         c[k++] = b[j++];
  29.     }

  30.     // 输出归并后的有序数组
  31.     for (i = 0; i < k; i++) {
  32.         printf("%d", c[i]);
  33.         if (i != k - 1) {
  34.             printf(" ");
  35.         }
  36.     }

  37.     return 0;
  38. }
复制代码


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

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

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

最后,我们按照题目要求输出归并后的有序数组。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-8 17:01:00 | 显示全部楼层    本楼为最佳答案   
以下是C语言的代码实现:

  1. #include <stdio.h>

  2. int main() {
  3.     int n1, n2, i, j, k;
  4.     int a[100], b[100], c[200];

  5.     // 输入第一个有序数组
  6.     scanf("%d", &n1);
  7.     for (i = 0; i < n1; i++) {
  8.         scanf("%d", &a[i]);
  9.     }

  10.     // 输入第二个有序数组
  11.     scanf("%d", &n2);
  12.     for (i = 0; i < n2; i++) {
  13.         scanf("%d", &b[i]);
  14.     }

  15.     // 归并两个有序数组
  16.     i = j = k = 0;
  17.     while (i < n1 && j < n2) {
  18.         if (a[i] < b[j]) {
  19.             c[k++] = a[i++];
  20.         } else {
  21.             c[k++] = b[j++];
  22.         }
  23.     }
  24.     while (i < n1) {
  25.         c[k++] = a[i++];
  26.     }
  27.     while (j < n2) {
  28.         c[k++] = b[j++];
  29.     }

  30.     // 输出归并后的有序数组
  31.     for (i = 0; i < k; i++) {
  32.         printf("%d", c[i]);
  33.         if (i != k - 1) {
  34.             printf(" ");
  35.         }
  36.     }

  37.     return 0;
  38. }
复制代码


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

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

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

最后,我们按照题目要求输出归并后的有序数组。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 15:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表