C语言每日一题(8):有序序列合并

2023-09-20 23:48:02

标头风景


  • 文章主题:有序序列合并🔥🔥🔥
  • 所属专栏:C语言每日一题📗
  • 作者简介:每天不定时更新C语言的小白一枚,记录分享自己每天的所思所想😄🎶
  • 个人主页:[₽]的个人主页🏄🌊


前言

编程起因

最近在牛客网中刚学到了一个比较有意思的题目,觉得对于锻炼编程思维比较有意义,便在VS上用优化的方法写了一遍后写下了这篇博客分享给大家。

项目介绍

项目名

有序序列合并

项目描述

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围:1 ≤ n, m ≤ 1000,序列中的值满足 0 ≤ val ≤ 30000

输入描述

输入包含三行,

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

第二行包含n个整数,用空格分隔。

第三行包含m个整数,用空格分隔。


设计思路

1.整体逻辑

方法一:将两行数字合并成一行数字后输入到一个数列中,再用冒泡排序法将其输出。方法二:将两行数字分别输入进两个数列中,两个数列边遍历边比较取最小元素输出,某一个数列首先输出完之后退出循环。用分支语句判断输出完的数列是哪个后,将另一个数组剩下的元素输出。

2. 具体逻辑

方法一:利用输入进去的行元素个数n和m遍历,将两行数字合并成一行数字后输入到一个数列中,再用冒泡排序法将其输出。方法二:利用输入进去的行元素个数n和m遍历,将两行数字分别输入进两个数列中,再用元素i和j储存两数列的下标,再分别各取第一个元素比较最小的元素输出后,通过自增储存数列下标的变量i或j的值将该元素属于的数列往后取第二个元素和另一个数组的第一个元素继续比较最小的元素输出后,如此循环往复的遍历之后,直到某一个数列首先输出完之后退出循环。再用分支语句判断输出完的数列是第一个还是第二个之后,将另一个数组剩下的元素输出出来,然后这样就将两数列中的数据以从小到大的顺序全部输出出来。


代码展示

方法一 :集中于一数列的冒泡排序法(速度慢,两行数排列顺序可随机)

#include <stdio.h>
int main()
{
    int n = 0, m = 0, arr[2000] = { 0 };
    printf("Please enter the number of rows for two sequences:\n");
    scanf("%d%d", &n, &m);
    printf("Please enter the elements of two sequences separately:\n");
    for (int i = 0; i < n + m; i++)//两行作一行储存在一数列中
    {
        scanf("%d", &arr[i]);
    }
    int tmp = 0;
    for (int i = n + m - 1; i > 0; i--)//将该行数列中的数有小到大冒泡排序
    {
        for (int j = 0; j < i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
    printf("The merged sequence in ascending order is:\n");//输出有小到大排序后的数列
    for (int i = 0; i < n + m; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

方法二 :两数列边遍历边比较取小元素输出法(速度快,两行必须小到大)

#include <stdio.h>
int main()
{
	int n = 0, m = 0, arr1[1000] = { 0 }, arr2[1000] = { 0 };
	printf("Please enter the number of rows for two sequences:\n");
	scanf("%d%d", &n, &m);
    printf("Please enter the elements of two sequences separately:\n");
	int i = 0, j = 0;
	for (; i < n; i++)//将第一行数据输入到数列1中
	{
		scanf("%d", arr1 + i);
	}
	for (; j < m; j++)//将第二行数据输入到数列2中
	{
		scanf("%d", arr2 + j);
	}
	i = 0;
	j = 0;
	int k = 0;
	printf("The merged sequence in ascending order is:\n");
	while (i < n && j < m)//运用具体逻辑中的方法将一个数列中的数据输出
	{
		if (arr1[i] < arr2[j])
		{
			printf("%d ", arr1[i++]);
		}
		else
		{
			printf("%d ", arr2[j++]);
		}
	}
	if (i == n)//运用分支语句判断输出的数列是哪一个后再将另一数列剩下的元素全部输出
	{
		for (; j < m; j++)
		{
			printf("%d ", arr2[j]);
		}
	}
	else
	{
		for (; i < n; i++)
		{
			printf("%d ", arr1[i]);
		}
	}
	return 0;
}

效果展现

效果展现


结语

以上就是我对有序序列合并这个项目的解题思路,代码以及效果展示,希望对你的C语言学习有所帮助!作为刚学编程的小白,可能在一些设计逻辑方面有些不足,欢迎评论区进行指正!看都看到这了,点个小小的赞或者关注一下吧(当然三连也可以~),你的支持就是博主更新最大的动力!让我们一起成长,共同进步!


更多推荐

设计模式之中介者模式

尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使

【Vue】Vue的监听属性与计算属性

在Vue中,有两种类型的属性是用于响应式的,即监听属性和计算属性。监听属性:监听属性是声明在Vue实例的data选项中的属性,它们用于存储应用程序中的状态或数据。当监听属性的值发生变化时,Vue会自动响应地更新绑定到该属性的视图。例如:data:{message:'HelloVue!'}当message的值改变时,绑定

树结构数据在table中回显 treeselect disabled

<el-table-columnlabel="产业认定"align="center"prop="industryIdentification"><templateslot-scope="scope"><treeselectv-if="scope.row.industryIdentification"v-model="s

(Clock Domain Crossing)跨时钟域信号的处理 (自我总结)

CummingsSNUG2008Boston_CDC.pdf参考:跨时钟域处理方法总结–最终详尽版-love小酒窝-博客园跨时钟域(CDC)设计方法之单bit信号篇(一)|电子创新网赛灵思社区孤独的单刀_Verilog语法,FPGA设计与调试,FPGA接口与协议-CSDN博客跨时钟域传输总结(包含verilog代码|T

低代码开源项目整理

低代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大幅度的提效降本,为专业开发者提供了一种全新的高生产力开发范式。下面就来分享几个值得学习和使用的前端低代码开源项目,更深入地了解什么是低代码。1AppsmithAppsmith是一款开源低代码框架,主要用于构建管理面板、内部工具和仪表

基于SSM+Vue的亿互游在线平台的设计与开发

末尾获取源码开发语言:JavaJava开发工具:JDK1.8后端框架:SSM前端:采用Vue技术开发数据库:MySQL5.7和Navicat管理工具结合服务器:Tomcat8.5开发软件:IDEA/Eclipse是否Maven项目:是目录一、项目简介二、系统功能三、系统项目截图用户功能模块的实现管理员功能模块的实现前台

王道考研计算机组成原理

王道考研计算机组成原理计算机系统概述计算机系统层次结构计算机的性能指标错题数据的表示和运算数制与编码运算方法和运算电路浮点数的表示与运算存储系统存储器概述主存储器主存储器与CPU的连接外部存储器高速缓冲存储器虚拟存储器指令系统指令格式指令的寻址方式程序的机器级代码表示CISC和RISC的基本概念中央处理器CPU的功能和

苹果专用解压缩推荐 BetterZip 5 中文for mac

BetterZip5是一款功能强大的解压缩软件,旨在帮助用户在Mac上快速、方便地解压缩各种压缩文件格式。它支持常见的压缩文件格式,如ZIP、RAR、7z、TAR、GZIP等,并提供了一系列高级功能和工具。以下是BetterZip5解压缩的一般步骤:打开BetterZip5:在Mac上启动BetterZip5应用程序。

TCP拥塞控制,拥塞窗口,携带应答,捎带应答,面向字节流,异常情况处理,最终完结弹

之前我们已经将TCP的前面一些性质介绍过了,接下来来介绍剩余的一些性质1.确认应答2.超时重新传输3.连接管理4.滑动窗口5.流量控制目录一、拥塞控制二、拥塞窗口三、携带应答四、粘包问题方法1:应用层协议引入分隔符方法2:应用层协议引入包长度五、TCP异常情况的处理一、拥塞控制💛总的传输效率,是一个木桶效应,取决于最

[JAVAee]SpringBoot配置文件

配置文件的介绍配置文件当中记录了许多重要的配置信息,例如:数据库的连接信息(用户的账户与密码)项目的启动端口第三方系统的调用密匙用于记录问题产生的日志在spring框架中一些特定的框架会自动调用配置文件中的配置信息来运用.配置文件中的属性也起到了类似全局变量的作用.对于一个项目,可以准备多种配置文件方便自由调用来应对不

tdesign的文件上传(微信小程序+idea的springboot)

目录1.springboot后端1.1FileController.java1.2listener文件的ErpApplicationListener.java1.3【重点!】FileServiceImpl层1.4IFileService1.5StringUtil通用类1.6主程序加一个监听器1.7application

热文推荐