关于有序序列的合并和判断 您所在的位置:网站首页 为什么两个scanf只用敲一次回车 关于有序序列的合并和判断

关于有序序列的合并和判断

2023-06-12 21:11| 来源: 网络整理| 查看: 265

目录

一.有序序列的合并

思路

代码实现

二.有序序列的判断

思路1

代码实现

思路2

代码实现

一.有序序列的合并

 

 

 

思路

1.先创建两个数组,分别存放两个有序序列。

实际上,根据题目要求,我们只需要得到两个有序序列合并后的结果,并不需要将两个有序序列数组整合到第三个有序序列数组中。

2.因为是两个正序有序序列数组,要比较它们的大小,将小的先打印出来,大的和另一个数组的下一位数进行比较。

通过下标对数组上的元素进行访问,当这个数组中的这个下标对应的元素打印完成,

下标++。

这样一个操作就构成一个循环,循环的条件设置为 下标 不大于(各自含有的元素个数-1)

当出循环时,再用if语句判断哪个有序序列没有打印完,将其剩下的数按序打印输出即可

3.为什么不用冒泡排序? 因为这需要将两个数组合并为一个数组,再进行冒泡排序。首先多创建一个数组,空间利用效率低了。其次使用冒泡排序会遍历多次数组,时间利用效率也低。

 

小tips:

这里题目说在输入的时候用空格分隔,而在实际的输入中,用scanf函数进行输入,其实不用在打印格式中加入空格。因为只有你在实际输入时用空格隔开两个数字时,scanf才会进行分别读取。而且分行也不用额外写代码实现,当你输入完一组数据,敲下回车,会结束这组数据的读取,并且自动进入下一行。

这是在输入格式中加了空格后的,可以看到敲完回车后并没有直接出现结果。

 

这是输入格式不加入空格的,可以看到直接出来结果了 

代码实现 #include int main() { int n = 0; int m = 0; int arr1[100] = {0}; int arr2[100] = {0}; //输入 scanf("%d %d", &n, &m); int i = 0; for(i=0; i (或又有1 。

所以思路2是认为3 4 4 4 4这种包含重复数字的序列依旧为有序序列的,因为它仍然满足从小到大排列。

具体用哪种方法,就要看具体的实际需求了。这两块代码在牛客网上都是可以通过的。但这不妨碍我们可以学习思路2的这种思维方式,去思考其他类似的问题。那就是当判断一个情况是对的比较复杂时,可以优先考虑判断这个情况是错的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有