这就是两个数组排序合并问题,然后找到k位置的编号
试下合并数组,将数组2合并到数组1中:
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m--+--n;
while(n>=0) {
nums1[i--] = m>=0 && nums1[m]>nums2[n] ? nums1[m--] : nums2[n--];
}
}
用两个数组来存。一个存位置 一个存号码
查询的时候直接取就行了。
int getK(int *a,int n,int *b,int m,int k)
{
int i,j;
for(i=0;i<m;i++) //将b中数据插入a
{
for(j=0;j<n;j++)
{
if(b[i] <= a[j])
{
for(k=n;k>j;k--)
a[k] = a[k-1];
a[k] = b[i];
break;
}
}
if(j==n)
a[n] = b[i];
n++;
}
return a[k];
}
void main()
{
int *a,*b,i;
int n,m,k;
printf("请输入a,b队伍人数n,m以及要查找编号的k位置:");
scanf("%d%d%d",&n,&m,&k);
a = (int*)malloc((n+m)*sizeof(int)); //b插入a
b = (int*)malloc(m*sizeof(int));
printf("请输入a队伍每个人的编号:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("请输入b队伍每个人的编号:");
for(i=0;i<m;i++)
scanf("%d",&b[i]);
int p = getK(a,n,b,m,k);
if(p>=0)
printf("第%d个人编号为:%d",k,p);
else
printf("k不再有效范围");
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!