
--题目链接:有序序列合并_牛客网


解题思路——
--对于变量,数组……准备工作,小子就不多bb了; 直接看结构
-- 首先想到进行有序合并就要比较大小,这里需要选择语句:用下标访问元素,遍历俩数组元素并大小;
--说到遍历就需要循环结构,因为可以判断循环条件比较简单:只要避免数组越界即可;所以使用while结构;
-- 再者,往前看,输入数组元素时,俩数组长度同样长的概率较小,一般是合并完一个数组,就要着手打印另个数组的剩余元素;
--这时要判断是哪个数组有身剩余:选择语句,条件也简单:下标未达到数组长度-1;
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
scanf("%d%d", &n, &m);
//检查输入是否正确
if (n < 1 || n > 1000 || m < 1 || m > 1000)
{
printf("n和m的范围应为1到1000。\n");
return 1;
}
int arr1[1000] = { 0 };
int arr2[1000] = { 0 };
//数组arr1输入升序数组
for (int i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
//检查数组元素输入
if (arr1[i] < 0 || arr1[i] > 30000)
{
printf("arr1[%d]超出范围!\n", i);
return 1;
}
}
//数组arr2输入升序数组
for (int j = 0; j < m; j++)
{
scanf("%d", &arr2[j]);
//检查数组元素输入
if (arr1[j] < 0 || arr1[j] > 30000)
{
printf("arr1[%d]的值超出范围!\n", j);
return 1;
}
}
//开始遍历数组,进行合并
int i = 0;
int j = 0;
while (i < n && j < m)
{
if (arr1[i] < arr2[j])
{
printf("%d ", arr1[i]);
i++;
}
else
{
printf("%d ", arr2[j]);
j++;
}
}
//数组arr1若有剩余元素
while (i < n)
{
printf("%d ", arr1[i]);
i++;
}
//数组arr2若有剩余元素
while (j < m)
{
printf("%d ", arr2[j]);
j++;
}
return 0;
}--上面代码是判断小的先打印,当然也有先打印大的,只不过在后程进行逆序打印整体效率低(自己体会吧):
int main()
{
int n = 0;
int m = 0;
scanf("%d%d", &n, &m);
int arr1[100] = { 0 };
int arr2[100] = { 0 };
int arr3[200] = { 0 };
//数组arr1输入升序数组
for (int i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
//数组arr2输入升序数组
for (int j = 0; j < m; j++)
{
scanf("%d", &arr2[j]);
}
int i = n - 1;
int j = m - 1;
int k = n + m -1;
while (i >= 0 && j >=0)
{
if (arr2[j] >= arr1[i])
{
arr3[k] = arr2[j];
j--;
k--;
}
else
{
arr3[k] = arr1[i];
i--;
k--;
}
}
// 处理剩余元素
while (i >= 0) {
arr3[k--] = arr1[i--];
}
while (j >= 0) {
arr3[k--] = arr2[j--];
}
//打印arr3
for (k = 0; k < n+m; k++)
{
printf("%d ", arr3[k]);
}
return 0;
}(对于上面的return语句,小子在这里有点补充要加)
--先说明:当代码执行到 return 1; 时,程序会立即终止,并返回状态码 1 给操作系统(表示异常退出)。
--这是可能会想,1不是表示为真嘛!怎么会异常退出!
--哎,你的问题非常好!这里确实存在一个容易混淆的概念:
--在逻辑判断中(如
if条件)
1 表示 逻辑真(true);
0 表示 逻辑假(false);
--在 return 语句中(程序退出状态):
return 0; 表示 程序成功执行(约定俗成);
return 1;(或其他非零值)表示 程序异常终止(错误码);
--所以输入合法性检查可以使用 return 1; :
--当用户输入不符合要求时(如超出范围、格式错误),终止程序并提示
结语:本篇内容收录在《C语言刷题集》中,本篇分享的是分支循环语句与数组综合运用的练习,难度稍有,一定程度上能够有效提升编程能力,喜欢的朋友们,三连后一起来学习吧!!!