合并两个相同大小的数组元素到第三数组,而不消除重复的元素

时间:2018-09-11 03:02:33

标签: c arrays

输入:

arr1[5] = { 4, 2, 7, 3, 1};  
arr2[5] = {9, 3, 6, 1, 10};

输出:

arr3[5] = {1, 1, 2, 3, 3};

如果我们合并两个数组int arr3[10]并以升序排序并仅采用第一个5元素,则可以解决问题。 但是这里我不想初始化arr大小10arr3[10])。

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

int arr1[5] = { 4, 2, 7, 3, 1};
int arr2[5] = {9, 3, 6, 1, 10};
int arr3[5];
int previousSmallest = 0;

for (int i = 0; i < 5; i++) {
    int j;
    int smallest = INT_MAX; // I assume you are working with positive ints only
    int smallestCount = 0;

    for (j = 0; j < 5; j++) {
        if (arr1[j] < smallest && arr1[j] > previousSmallest) {
            smallest = arr1[j];
            smallestCount = 1;
        } else if (arr1[j] == smallest) {
            smallestCount++;
        }
    }

    for (j = 0; j < 5; j++) {
        if (arr2[j] < smallest && arr2[j] > previousSmallest) {
            smallest = arr2[j];
            smallestCount = 1;
        } else if (arr2[j] == smallest) {
            smallestCount++;
        }
    }

    for (int k = 0; k < smallestCount; k++) {
        arr3[i++] = smallest;
    }
    i--;

    previousSmallest = smallest;
}

for (int l = 0; l < 5; l++)
    printf("%d\n", arr3[l]);

但是,我希望这项练习比其他任何事情都更适合胡桃钳。最好使用那些额外的内存并使速度更快。

很抱歉,虽然这没有达到应有的效率,但它确实有效,我在几分钟内完成了草图。希望对您有所帮助。

PS:别忘了包含限制。h

答案 1 :(得分:0)

这是一个非常简单明了的情况。您需要做的就是对两个给定的数组arr1arr2进行排序。然后从两者中选取5个总体最小要素。我已经附上了下面的代码。我已经测试过,它就像一个魅力。

#include <stdio.h>

int main(void) {
  int arr1[5] = { 4, 2, 7, 3, 1};  
  int arr2[5] = {9, 3, 6, 1, 10};
  int arr3[5];
  int i, j, k = 0, temp;
  for (i = 0; i < 5; ++i) 
  {
    for (j = i + 1; j < 5; ++j)
    {
      if (arr1[i] > arr1[j]) 
      {
        temp =  arr1[i];
        arr1[i] = arr1[j];
        arr1[j] = temp;
      }
    }
  }
  for (i = 0; i < 5; ++i) 
  {
    for (j = i + 1; j < 5; ++j)
    {
      if (arr2[i] > arr2[j]) 
      {
        temp =  arr2[i];
        arr2[i] = arr2[j];
        arr2[j] = temp;
      }
    }
  }
  i = 0, j = 0;
  while(i < 5 && j < 5 && k < 5) {
    if(arr1[i] <= arr2 [j]) {
      arr3[k++] = arr1[i++];
    }
    else {
      arr3[k++] = arr2[j++];
    }
  }
  for(i = 0; i < 5; i++) {
    printf("%d  ",arr3[i]);
  }
  return 0;
}