输入:
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
大小10
(arr3[10]
)。
答案 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)
这是一个非常简单明了的情况。您需要做的就是对两个给定的数组arr1
和arr2
进行排序。然后从两者中选取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;
}