关于有序序列的合并和判断 | 您所在的位置:网站首页 › 为什么两个scanf只用敲一次回车 › 关于有序序列的合并和判断 |
目录 一.有序序列的合并 思路 代码实现 二.有序序列的判断 思路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 实验室设备网 版权所有 |