【考研每日一题37】取中值(C++)
程序员文章站
2022-07-12 23:40:15
...
原题地址:牛客网
题目描述
存在两组数组,和4个数字a,b,c,d,要求做如下操作,将第一个数组第a个数到第b个数,第二个数组的第c个数到第d个数放到一个数组中,求出合并后数组的中间值,如果有两个中间值,取下标较小的那个。
输入描述:
第一行两个整数,表示两个数组的长度, 接下来两行表示两个数字的值, 最后一行有四个整数a,b,c,d。 数组长度不会超过1000000。
输出描述:
每行一个整数,对应合并数组的下标在中间的那个值。
示例1
输入
5 4 1 2 3 4 5 6 7 8 9 1 2 1 3
输出
6
分析:
不需要排序。。
代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int a,b;
while(cin>>a>>b)
{
int x[1000001],y[1000001],z[1000001];
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
for(int i=1;i<=a;i++)
{
cin>>x[i];
}
for(int j=1;j<=b;j++)
{
cin>>y[j];
}
int f,l;
cin>>f>>l;
int g=l-f+1;
for(int t=1;f<=l;t++)
{
z[t]=x[f];
f++;
}
cin>>f>>l;
int m=l-f+1;
for(int t=g+1;f<=l;t++)
{
z[t]=y[f];
f++;
}
if((g+m)%2==0)cout<<z[(g+m)/2]<<endl;
else cout<<z[(g+m+1)/2]<<endl;
}
return 0;
}
2020.4.25
上一篇: 高编作业(九)