大家好今天的每日一题又来啦!
输?两个升序排列的序列,将两个序列合并为?个有序序列并输出。 输?包含三?,第??包含两个正整数n, m,?空格分隔。n表?第??第?个升序序列中数字的个 数,m表?第三?第?个升序序列中数字的个数。其中 1<=n<=30, 1<=m<=30 第??包含 n 个整数,?空格分隔。 第三?包含 m 个整数,?空格分隔。 输出为??,输出?度为n+m的升序序列,即?度为n的升序序列和?度为m的升序序列中的元素重 新进?升序序列排列合并。
提示:以下是本篇文章正文内容,下面案例可供参考
定义?个?度为 n+m 的新数组 arr3 ,将两个有序数组合并到 arr3 数组中,使得 arr3 数组有 序。
1. 定义?个?度为 n+m 的新数组 arr3 ,以及两个指针 i 和 j ,分别指向 arr1 和 arr2 的开头;
2. 定义?个计数器 k ,初始化为 0;
3. ?较 arr1[i] 和 arr2[j] ,将较?的数存? arr3 中,并将对应指针向后移动?位;
4. 将计数器 k 加 1;
5. 重复步骤 3 和 4 直到某个指针越界;
6. 将另?个指针指向的数组的剩余所有元素依次存? arr3 中,存?同时将计数器 k 的值?增 1;
7. ?此, arr3 数组中的元素为 arr1 数组和 arr2 数组合并并排序后的结果,按序输出前 k 个元素即可。
代码如下(示例):
#include <stdio.h>
int main()
{
int i=0;
int n=0;
int m=0;
int arr1[30]={0};
int arr2[30]={0};
int arr3[60]={0};
scanf("%d %d",&n,&m);
for (i=0;i<n;i++)
{
scanf("%d",&arr1[i]);
}
for(i=0;i<m;i++)
{
scanf("%d",&arr2[i]);
}
i=0;
int j=0;
int k=0;
while(i<n&&j<m)
{
if(arr1[i]<arr2[j])
{
arr3[k]=arr1[i];
k++;
i++;
}
else
{
arr3[k]=arr2[j];
k++;
j++;
}
if(i==n)
{
for(;j<m;j++)
{
arr3[k]=arr2[j];
k++;
}
}
if(j==m)
{
for(;i<n;i++)
{
arr3[k]=arr1[i];
k++;
}
}
}
for(k=0;k<n+m;k++)
{
printf("%d",arr3[k]);
}
return 0;
}
。
今天的每日一题结束啦谢谢大家O(∩_∩)O。不对的地方请在评论区留言谢谢大家的斧正