C语言:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

news2024/9/27 15:34:26

题目:

描述

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出

            

输入描述:

输入包含三行
            
第一行包含两个正整数n, m,用空格分隔n表示第二行第一个升序序列中数字的个数m表示第三行第二个升序序列中数字的个数
            
第二行包含n个整数,用空格分隔
            
第三行包含m个整数,用空格分隔。

                 

输出描述:

输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并

                    

 =========================================================================

                       

思路:

总体思路:

(一).

输入 n m

定义变长数组 arr1 arr2(牛客网是支持变成数组的),

变长数组进行赋值

                    

(二).

进行合并
定义第三个变长数组 arr3 ,分别定义三个数组的下标 ijk

使用 while循环arr1 和 arr2 都有值时进行合并,合并到 arr3

使用 if条件判断语句arr1 小于 arr2 的值赋给 arr3调整两数组下标

使用 else语句等于 或 arr2 < arr1 的值赋给 arr3调整两数组下标

                

(三).

进行完(二)中的步骤后,

跳出循环说明有一个数组已经遍历完了

此时 i、j、k 下标都已经移动到了合适的位置

判断是哪个数组遍历完了

如果 i == n,说明是 arr1 遍历完了,则把 arr2 中剩余的元素全部放入 arr3 中;

其它情况(j == m),说明是 arr2 遍历完了,则把 arr1 中剩余的元素全部放入 arr3 中。

进行打印

                        


                 

第一步:

(1). 输入 n m

              

(2). 定义变长数组 arr1 arr2

              

(3). 对变长数组进行赋值

                     

实现代码:

#include <stdio.h>
int main() {
    
    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
    //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
    //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    return 0;
}

实现图片:

                 


                 

第二步:

开始合并:

              

(1). 定义第三个变长数组 arr3定义三个变长数组的下标ijk

              

(2).使用 while循环arr1 和 arr2 都有值时进行合并,合并到 arr3

            

(3).使用 if条件判断语句arr1 小于 arr2 的值赋给 arr3调整两数组下标

使用 else语句等于 或 arr2 < arr1 的值赋给 arr3调整两数组下标

                     

实现代码:

#include <stdio.h>
int main() {
    
    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
    //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
    //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    //开始合并:
    //定义第三个变长数组arr3,存放两arr1 和 arr2合并后的结果:
    int arr3[n + m]; //变长数组不能初始化
    //定义三个变长数组的下标:
    i = 0; //arr1下标
    int j = 0; //arr2下标
    int k = 0; //arr3下标

    //使用 while循环,
    while (i<n && j<m)
     //i<n:arr1下标小于arr1长度,说明arr1还有值
     //j<m:arr2下标小于arr2长度,说明arr2还有值
        //两个数组都有值才用进行比较赋值
    {
        if (arr1[i] < arr2[j]) //arr1的值小于arr2的值
        {
            arr3[k] = arr1[i]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            i++;
        }
        else //等于时放谁都一样 或 arr2变得比较小了
        {
            arr3[k] = arr2[j]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            j++;
        }
    }

    return 0;
}

实现图片:

                 


                 

第三步:

进行完(二)中的步骤后,

跳出循环说明有一个数组已经遍历完了

此时 i、j、k 下标都已经移动到了合适的位置

           

(1). 先判断是哪个数组遍历完了

如果 i == n,说明是 arr1 遍历完了,则把 arr2 中剩余的元素全部放入 arr3 中;

其它情况(j == m),说明是 arr2 遍历完了,则把 arr1 中剩余的元素全部放入 arr3 中。

              

(2). 进行打印

                     

实现代码:

#include <stdio.h>
int main() {

    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
        //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
        //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    //开始合并:
    //定义第三个变长数组arr3,存放两arr1 和 arr2合并后的结果:
    int arr3[n + m]; //变长数组不能初始化
    //定义三个变长数组的下标:
    i = 0; //arr1下标
    int j = 0; //arr2下标
    int k = 0; //arr3下标

    //使用 while循环,
    while (i < n && j < m)
        //i<n:arr1下标小于arr1长度,说明arr1还有值
        //j<m:arr2下标小于arr2长度,说明arr2还有值
           //两个数组都有值才用进行比较赋值
    {
        if (arr1[i] < arr2[j]) //arr1的值小于arr2的值
        {
            arr3[k] = arr1[i]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            i++;
        }
        else //等于时放谁都一样 或 arr2变得比较小了
        {
            arr3[k] = arr2[j]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            j++;
        }
    }

    //跳出循环说明有一个数组已经被遍历完了
    //此时,i、j、k 都已经移动到了合适的位置
    //判断哪个数组遍历完了进行操作:
    if (i == n) //arr1下标等于arr1数组长度,说明arr1遍历完了
    {
        //将arr2中剩余的元素全部放入arr3中:
        while (j < m)//arr2下标小于arr2数组长度就继续放
        {
            arr3[k] = arr2[j];
            k++;
            j++;
        }
    }
    else //arr2遍历完
    {
        //将arr1中剩余的元素全部放入arr3中:
        while (i < n)//arr1下标小于arr1数组长度就继续放
        {
            arr3[k] = arr1[i];
            k++;
            i++;
        }
    }

    //进行打印:
    for (i = 0; i < n + m; i++)
    {
        printf("%d ", arr3[i]);
    }

    return 0;
}

实现图片:

                    

最终代码和实现效果

最终代码:

#include <stdio.h>
int main() {

    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
        //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
        //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    //开始合并:
    //定义第三个变长数组arr3,存放两arr1 和 arr2合并后的结果:
    int arr3[n + m]; //变长数组不能初始化
    //定义三个变长数组的下标:
    i = 0; //arr1下标
    int j = 0; //arr2下标
    int k = 0; //arr3下标

    //使用 while循环,
    while (i < n && j < m)
        //i<n:arr1下标小于arr1长度,说明arr1还有值
        //j<m:arr2下标小于arr2长度,说明arr2还有值
           //两个数组都有值才用进行比较赋值
    {
        if (arr1[i] < arr2[j]) //arr1的值小于arr2的值
        {
            arr3[k] = arr1[i]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            i++;
        }
        else //等于时放谁都一样 或 arr2变得比较小了
        {
            arr3[k] = arr2[j]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            j++;
        }
    }

    //跳出循环说明有一个数组已经被遍历完了
    //此时,i、j、k 都已经移动到了合适的位置
    //判断哪个数组遍历完了进行操作:
    if (i == n) //arr1下标等于arr1数组长度,说明arr1遍历完了
    {
        //将arr2中剩余的元素全部放入arr3中:
        while (j < m)//arr2下标小于arr2数组长度就继续放
        {
            arr3[k] = arr2[j];
            k++;
            j++;
        }
    }
    else //arr2遍历完
    {
        //将arr1中剩余的元素全部放入arr3中:
        while (i < n)//arr1下标小于arr1数组长度就继续放
        {
            arr3[k] = arr1[i];
            k++;
            i++;
        }
    }

    //进行打印:
    for (i = 0; i < n + m; i++)
    {
        printf("%d ", arr3[i]);
    }

    return 0;
}

实现效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 教程(12)——循环

C 循环 有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次…

朋友圈功能合集来咯!定时发朋友圈,查看朋友圈,朋友圈跟圈,一键转发朋友圈,延迟评论

&#x1f30a;发布朋友圈 功能介绍&#xff1a;可使用已登录在系统上的微信号发送朋友圈。支持发送图片、文字、视频和公众号链接等几种类型的内容。 &#xff08;1)朋友圈内容编辑&#xff1a;可以在输入框中输入要发送的文本&#xff0c;并在浮窗中选择表情。上传图片可以点…

【c++11】c++11特性

c11 c11简介列表初始化std::initializer_list autodecltypenullptr 结语 c11简介 从C0x到C11&#xff0c;C标准10年磨一剑&#xff0c;第二个真正意义上的标准珊珊来迟。相比于C98/03&#xff0c;C11则带来了数量可观的变化&#xff0c;其中包含了约140个新特性&#xff0c;以…

QT QTreeView\QTreeWidget控件 使用详解

本文详细的介绍了QTreeView、QTreeWidget控件的各种操作&#xff0c;例如&#xff1a;新建界面、QTreeWidget、QTreeView、控件布局、设置列、设置宽高、设置列表头、设置复选框、设置图标、添加树、删除树、查找树、修改树、设置选中、树排序、事件、信号、槽函数、添加节点、…

【玩转Docker小鲸鱼叭】MacOS系统安装Docker

安装Docker Mac 系统安装 Docker 其实很简单&#xff0c;我们在官方文档下载安装一下就可以了&#xff0c;但是需要注意 Docker 官方建议 MacOS 必须是版本 11 或更高版本&#xff0c;如果版本较低&#xff0c;建议先升级 MacOS 版本。 可以通过左上角的小  图片查看系统版…

浅析Spring-kafka源码——消费者模型的实现

SpringBoot项目中的消费端实现而言,Spring-kafka没有用原生的ConsumerConnector,,而是借助原生client的拉取消息功能做了自己的消费模型的实现,提供了@KafkaListener注解这种方式实现消费。 开发中在使用Spring-kafka时,一般也都是通过使用@KafkaListener注解的方法来实现…

Android MPAndroidChart折线图渐变填充实现

效果如下&#xff1a; 以下是一个从上到下渐变的drawable&#xff0c;上面是蓝色&#xff0c;逐步向下变成白色&#xff1a; chart_bg.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk…

静态链接和动态链接 -- 静态加载(隐式调用)和动态加载(显式调用)

区别 静态链接和动态链接 静态链接 : 由链接器在链接时将库的内容加入到可执行程序中&#xff0c;这里的库是静态库&#xff0c;Windows下是*.lib后缀&#xff0c;Linux下是*.a后缀。动态链接 : 可执行程序加载时(静态加载) 或者 运行时(动态加载)&#xff0c;将库文件中的内容…

OpenShift Virtualization - 通过外部固定 IP 访问 VM 中的服务(附视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.12 的环境中验证 文章目录 方法1&#xff1a;通过 Service 的 NodePort 访问 VM方法2&#xff1a;通过外部 IP 访问 VM确认 OpenShift 集群环境为 Worker 节点添加 Linux Bridge创建使用 Li…

『DevOps最佳实践』使用Jenkins和Harbor进行持续集成和交付的解决方案

&#x1f4e3;读完这篇文章里你能收获到 全文采用图文形式讲解学会使用Harbor配置项目学会在Jenkins中配置Harbor推送权限使用Jenkins和Harbor进行持续集成的实践感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录 一、准备工作1. 环境准备2. 修改Docker配置文件3. Docker登陆…

2023蓝桥杯大学A组C++国赛游记+个人题解

Day0 发烧了一晚上没睡着&#xff0c;感觉鼻子被打火机烧烤一样难受&#xff0c;心情烦躁 早上6点起来吃了个早饭&#xff0c;思考能力完全丧失了&#xff0c;开始看此花亭奇谭 看了六集&#xff0c;准备复习数据结构考试&#xff0c;然后秒睡 一睁眼就是下午2点了 挂了个…

04- c语言数组 (C语言)

一 数组的概念 1、在程序设计中&#xff0c;为了方便处理数据把具有相同类型的若干变量按有序形式组织起来,这些按序排列的 同类数据元素的集合 称为 数组。 2、在C语言中&#xff0c;数组属于构造数据类型。一个数组可以分解为多个数组元素&#xff0c;这些数组元素可以是基本…

力扣动态规划专题(三)完全背包 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯 322. 零钱兑换 279.完全平方数 步骤及C++实现

文章目录 完全背包一维dp数组 滚动数组 518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯322. 零钱兑换279.完全平方数139.单词拆分 完全背包 完全背包的物品数量是无限的&#xff0c;01背包的物品数量只有一个 完全背包和01背包分许步骤一样&#xff0c;唯一不同就是体现在遍历顺序上…

deque的介绍

前言 为什么会存在deque呢&#xff1f;在c标准库中deque是作为 stack和queue的底层容器就是deque&#xff0c;我们要是了解过list和vector就会知道这两种容器各有优劣&#xff0c;vector的优点是支持随机访问&#xff0c;进而可以支持排序和二分查找等算法&#xff0c;它的缺点…

鼠标事件 获取鼠标坐标及点击事件

运行效果&#xff1a; 头文件 #ifndef MOUSEEVENT_H #define MOUSEEVENT_H #include #include #include #include class MouseEvent : public QMainWindow { Q_OBJECT public: MouseEvent(QWidget *parent 0); ~MouseEvent(); protected: void mousePressEvent(QMouse…

Linux:一键搭建ftp服务(vsftpd)

《TRO-23614-VSFTPD》 如果csdn收费 可以和我si liao 我会免费发给你 我发的这个是一个tar归档包&#xff0c;脚本就在其中 Linux&#xff1a;《tar》归档命令_鲍海超-GNUBHCkalitarro的博客-CSDN博客 tar xfz tarro_vsftpd.tar.gz -C /root/ # tar xfz tar包路径 -…

SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源

SpringBoot第27讲&#xff1a;SpringBoot集成MySQL - MyBatis 多个数据源 本文是SpringBoot第27讲&#xff0c;在某些场景下&#xff0c;Springboot需要使用多个数据源&#xff0c;以及某些场景会需要多个数据源的动态切换。本文主要介绍上述场景及 SpringBootMyBatis实现多个数…

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)

大家好&#xff0c;各位努力奋斗的大学生小伙伴们&#xff01;今天&#xff0c;我将带你们领略一项令人惊叹的程序设计奇迹——《奖学金评定系统》&#xff01;是不是感到激动呢&#xff1f;别急&#xff0c;让我为你们揭开这个能让你在C语言程序设计中拿满分的秘密武器&#x…

ASP.NET Core MVC 从入门到精通之Identity入门

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

pikache靶场通关——XSS漏洞

文章目录 前言环境第一关、反射型xss(get)Step.1、输入特殊字符测试Step.2、输入js语句Step.3、在URL中输入js语句 第二关、反射性xss(post)Step.1、输入获取cookie的js语句 第三关、存储型xssStep.1、输入获取cookie的js语句Step.2、查看页面源码Step.3、感受危害性 第四关、D…