题目描述:
已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
输入:
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。
输出:
输出合并后的m+n个整数,数据之间用空格隔开。输出占一行.。
输入样例
Copy
4 1 3 5 7
3 6 4 2
输出样例
Puts
7 6 5 4 3 2 1
提示
试图排序的孩子们要小心了~~~~~~
题解如下:
#include <stdio.h>
void PrintArr(int a[], int n);/*输出数组a的前n个元素*/
int a[1000000], b[1000000],c[2000010];
int main()
{
int m, n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
scanf("%d", &b[i]);
}
int d = m + n;
int j = 0;
for (int i=0;i<d;i++)
{
if (a[n - 1] > b[j])
{
c[i] = a[n - 1];
n--;
}
else if(a[n-1]<b[j])
{
c[i] = b[j];
j++;
}
else if(a[n - 1] == b[j])
{
c[i] = a[n - 1];
c[i + 1] = b[j];
n--; j++;
i++;
}
}
/*int tem; int flag = 0;
for (int i = 0; i < d - 1; i++)
{
for (int j = 0; j < d - 1 - i; j++)
{
if (c[j] <= c[j + 1])
{
tem = c[j + 1];
c[j + 1] = c[j];
c[j] = tem;
flag = 1;
}
}
if(flag==0)
break;
}*/
PrintArr(c, d);
return 0;
}
void PrintArr(int a[], int n)/*输出数组a的前n个元素*/
{
int x;
printf("%d", a[0]);
for (x = 1; x <= n - 1; x++)
printf(" %d", a[x]);
}
/* 这里简单补充下自己做题过程中所查阅的资料 栈内存,系统默认值为最大1Mb, 最大可以申请1024*1024/4=264144个,堆栈溢出 方法一:申明为全局变量 方法二:存放在堆上*/
本题不能采用冒泡排序,否则时间会超限。
如果看到了任何的问题和留言都会及时回复,请积极互动o!
版权声明:本文为qq_73625278原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。