先上代码,下面有解析!!
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr1[1000] = {0};
int arr2[1000] = {0};
//输入
scanf("%d %d", &n, &m);
int i = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr1[i]);
}
for(i=0; i<m; i++)
{
scanf("%d", &arr2[i]);
}
//处理
int j = 0;
i = 0;
while(i<n && j<m)
{
if(arr1[i] < arr2[j])
{
printf("%d ", arr1[i]);
i++;
}
else
{
printf("%d ", arr2[j]);
j++;
}
}
if(i == n)
{
for(; j<m; j++)
{
printf("%d ", arr2[j]);
}
}
else
{
for(; i<n; i++)
{
printf("%d ", arr1[i]);
}
}
return 0;
}
1.前面的关于scanf的代码解析
1.设定 n m,则是用来设定数组里的数字有多少个(后面的for循环有用到)
2.设定两个数组用来存放想要和并的有序数列。
3.用两个for循环来输入数组的内容,因为数组不止一个数字,所以用for循环来循环输入
int main()
{
int n = 0;
int m = 0;
int arr1[1000] = {0};
int arr2[1000] = {0};
//输入
scanf("%d %d", &n, &m);
int i = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr1[i]);
}
for(i=0; i<m; i++)
{
scanf("%d", &arr2[i]);
}
2.后面的关于有序数列合并的核心代码
1.初始化两个变量i j是用来进行两个数组合并时,用来记每个数组已经合并了多少个数字。
2.用while语句循环两个i j变量其中一个等于 n m则循环结束
&&是数学中的并且的意思,表示两真才为真,一假则为假。
3.用数组1和数组2中的数字进行比较,数字小的一方被打印出来,且数字小的一方因此少了一个数字,所以i 或者 j ++。直到有一方不在小于 n 或者 m。循环跳出
4.循环跳出后查看是i 和 j 哪个变量与 n m相等了,如果和是 i == n 那剩下的则全剩下 j 的数字,在讲 j 剩下的数字打印出来即可。如果是j == m,则同上。
int j = 0;
i = 0;
while(i<n && j<m)
{
if(arr1[i] < arr2[j])
{
printf("%d ", arr1[i]);
i++;
}
else
{
printf("%d ", arr2[j]);
j++;
}
}
if(i == n)
{
for(; j<m; j++)
{
printf("%d ", arr2[j]);
}
}
else
{
for(; i<n; i++)
{
printf("%d ", arr1[i]);
}
}
return 0;
}