这个为什么一直写不对,有无学霸写一下

img

这就是两个数组排序合并问题,然后找到k位置的编号

img

试下合并数组,将数组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不再有效范围");
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632