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

news2025/1/12 8:41:38

标头风景


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

目录

  • 前言
    • 编程起因
    • 项目介绍
      • 项目名
      • 项目描述
      • 输入描述
  • 设计思路
    • 1.整体逻辑
    • 2. 具体逻辑
  • 代码展示
    • 方法一 :集中于一数列的冒泡排序法(速度慢,两行数排列顺序可随机)
    • 方法二 :两数列边遍历边比较取小元素输出法(速度快,两行必须小到大)
  • 效果展现
  • 结语


前言

编程起因

最近在牛客网中刚学到了一个比较有意思的题目,觉得对于锻炼编程思维比较有意义,便在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语言学习有所帮助!作为刚学编程的小白,可能在一些设计逻辑方面有些不足,欢迎评论区进行指正!看都看到这了,点个小小的赞或者关注一下吧(当然三连也可以~),你的支持就是博主更新最大的动力!让我们一起成长,共同进步!


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

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

相关文章

启动盘制作软件 Rufus

下载链接&#xff1a;Rufus - 轻松创建 USB 启动盘 我根据自己的系统选择了X86 找一个路径即可下载

基于SSM框架的《超市订单管理系统》Web项目开发(第四天)用户管理,增删改查(日期插件的使用)

基于SSM框架的《超市订单管理系统》Web项目开发&#xff08;第四天&#xff09;用户管理&#xff0c;增删改查&#xff08;日期插件的使用&#xff09; 昨天我们实现了多表关联查询&#xff0c;还有分页显示数据的功能。那么今天我们要继续完善用户管理这一模块。 今天要完成的…

基于微信小程序的网上商城设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

Linux小程序-进度条

进度条我将实现三个版本&#xff1a; 1 简单原理版本 2 实际工程实践版本 3 c语言扩展-设计颜色 首先我们需要有一些前置知识&#xff1a;关于行缓冲区和回车换行 行缓冲区&#xff1a;c/c语言会针对标准输出给我们提供默认的缓冲区&#xff0c;这次的角色是输出缓冲区 输…

java框架-Springboot-快速入门

文章目录 组件注册条件注解属性绑定自动装配原理自定义组件yaml属性配置日志日志级别日志分组文件输出文件归档与文件切割自定义配置切换日志组合 组件注册 Configuration、SpringBootConfigurationBean、ScopeController、Service、Repository、ComponentImportComponentScan…

selenium不定位元素直接使用键盘操作(如弹框操作)

今天在使用selenium进行定位时&#xff0c;发现直接定位不了chrome的弹框&#xff0c;如这种弹框&#xff1a; 使用的是下面这行代码 driver.switch_to.alert.accept() 运行报错&#xff0c;说是没有 alert windown。。。。 啊&#xff1f;难道chrome的弹框不是用alert写的&…

Go 多版本管理工具

Go 多版本管理工具 文章目录 Go 多版本管理工具一、go get 命令1.1 使用方法&#xff1a; 二、Goenv三、GVM (Go Version Manager)四、voidint/g4.1 安装4.2 冲突4.3 使用 在平时开发中&#xff0c;本地新旧项目并行开发的过程中&#xff0c;你大概率会遇到一个令人头疼的问题&…

MyBatisPlus 底层用 json 存储,Java 仍然使用 对象操作

PO 类的字段定义为一个对象&#xff0c;然后使用以下注解修饰 TableField(typeHandler JacksonTypeHandler.class) 当然 jsonTypeHandler 有多种可以选择

【多尺度无监督:Pansharpening】

Mun-GAN: A Multiscale Unsupervised Network for Remote Sensing Image Pansharpening (Mun-GAN&#xff1a;一种多尺度无监督遥感图像泛锐化网络) 在遥感图像融合中&#xff0c;全色锐化是一种遥感图像融合方法&#xff0c;旨在融合全色&#xff08;PAN&#xff09;图像和多…

Jmeter对图片验证码的处理

​jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证…

基于微信小程序的小区服务管理系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

Java8实战-总结33

Java8实战-总结33 重构、测试和调试使用 Lambda 重构面向对象的设计模式策略模式模板方法 重构、测试和调试 使用 Lambda 重构面向对象的设计模式 新的语言特性常常让现存的编程模式或设计黯然失色。比如&#xff0c; Java 5中引入了for-each循环&#xff0c;由于它的稳健性和…

云端IDE的技术选型1

背景 考虑到以下几点&#xff0c;准备给低代码平台开发一套云端的IDE&#xff1a; 桌面端IDE&#xff1a;vs code 或 idea&#xff0c;都有需要开发人员安装ide&#xff0c;以及配置环境很多时候&#xff0c;配置开发环境是个非常曲折过程&#xff0c;经常出现版本不匹配&…

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 模型训练1&#xff09;数据集分析2&#xff09;数据预处理3&#xff09;模型创建4&#xff09;模型训练5&#xff09;获取特征矩阵 2. 后端Django1&#xff09;路由文件2&#xff09;视图层文件3&#xff09;项目…

GitHub上标星23K+的Redis进阶笔记(应用+原理+集群+拓展+源码)

先来看几道Redis面试题&#xff1a; redis为什么是key&#xff0c;value的&#xff0c;为什么不是支持SQL的&#xff1f;redis是多线程还是单线程&#xff1f;&#xff08;回答单线程的请回吧&#xff0c;为什么请回&#xff0c;请往下看&#xff09;redis的持久化开启了RDB和…

9.25day5---Qt

登录页面设计&#xff0c;建立用户注册以及登录的数据库&#xff0c;数据库保存用户名和密码 &#xff08;ps:本篇只完成了登录功能&#xff0c;其他功能&#xff0c;请见下篇嘿嘿。&#xff09; 再次注册则失败&#xff1a; 代码如下&#xff1a; 头文件&#xff1a; 登录…

Android字体大小dp,sp,px系统设置字体大小变化表现

Android字体大小dp,sp,px系统设置字体大小变化表现 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andr…

14基于MATLAB的鲸鱼优化VMD参数,以熵值为适应度函数,对VMD参数惩罚因子和层数进行寻优,确定最优值并进行信号分解,程序已调通,可以直接运行。

基于MATLAB的鲸鱼优化VMD参数&#xff0c;以熵值为适应度函数&#xff0c;对VMD参数惩罚因子和层数进行寻优&#xff0c;确定最优值并进行信号分解&#xff0c;程序已调通&#xff0c;可以直接运行。

Idea操作Git合并另一个分支的部分提交

现有master、dev两个分支&#xff0c;master有提交1、2、3、4、5、6、7&#xff0c;dev是从master提交的3拉出来的分支&#xff08;Reset Current Branch to Here…&#xff0c;Mixed模式&#xff09;&#xff0c;有提交1、2、3&#xff0c;现在的需求是dev分支只需要合并maste…

解释器风格架构C# 代码

/*解释器风格架构是一种基于组件的设计架构&#xff0c;它将应用程序分解为一系列组件&#xff0c;每个组件负责处理特定的任务。这种架构有助于提高代码的可维护性和可扩展性。以下是如何使用C#实现解释器风格架构的步骤&#xff1a;定义组件&#xff1a;首先&#xff0c;定义…