合并具有相同sizeof第三个数组的两个数组元素,而不消除重复元素

问题描述 投票:1回答:2

输入:

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])。

c arrays
2个回答
0
投票

这是一个非常简单和直接的情况。你需要做的就是对2个给定的数组进行排序,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;
}

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:不要忘记包含limits.h

© www.soinside.com 2019 - 2024. All rights reserved.