C 查找数组之间的公共元素(匹配元素)
假设我有一个输入,其中作为输入的数组的数量不是固定的,每个数组中的元素数量也不是固定的。所以每次我的输入都不一样C 查找数组之间的公共元素(匹配元素),c,arrays,C,Arrays,假设我有一个输入,其中作为输入的数组的数量不是固定的,每个数组中的元素数量也不是固定的。所以每次我的输入都不一样 Example 1: 1st input 1st array= [2,3,4] 2nd array =[6,7,8,9] 3rd array=[5,3,12] Example 2: 2nd input 1st array= [6,3,4,8] 2nd array =[6,7,4,9] 3rd array=[1,2,12] 4th array= [20,21,2
Example 1: 1st input
1st array= [2,3,4]
2nd array =[6,7,8,9]
3rd array=[5,3,12]
Example 2: 2nd input
1st array= [6,3,4,8]
2nd array =[6,7,4,9]
3rd array=[1,2,12]
4th array= [20,21,22,23,25]
所需的解决方案是,将第一个阵列视为参考阵列,根据第一个阵列(参考)检查下一组阵列,要求是第二个数组相对于第一个数组不应该有一个公共元素,接下来的检查是第三个数组不应该和第一个数组有一个公共元素
from 1st Example
1st array= [2,3,4] -- reference array
1st array= [2,3,4] is compared to 2nd array =[6,7,8,9]
1st array= [2,3,4] is compared to 3rd array=[5,3,12]
solution needed:
+ print 1st array( reference array)
+ if no common elements found between 1st array and 2nd array, from ex. no common elements found, so print out the 2nd array.
+ same for 3rd array, from ex. there is common element(3 is present in both first and third array), so dont print.
我尝试过将输入存储在二维数组中,但我搞砸了。
请指导我使用您的算法/代码计算此值。因为问题表明数组的长度不是常数,所以静态二维数组的想法可能不起作用。可以使用DMA创建二维数组(malloc和calloc函数)
您可以选择一种直接的算法,将引用数组中的每个元素与其他数组进行比较。请注意,我必须创建一个数组来包含各种数组的长度,并创建一个参数来指示该数组的长度
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void print_array(int *a, int size) {
int i;
for (i = 0; i<size; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
bool is_in(int *a, int size, int elem) {
int i;
for (i=0; i<size; i++) {
if (a[i] == elem) {
return true;
}
}
return false;
}
void f(int **a, int a_siz, int* sizes) {
print_array(a[0],sizes[0]);
for (int i=1; i< a_siz; i++) {
bool common_element = false;
for (int k=0; k< sizes[i]; k++) {
if (is_in(a[0],sizes[0],a[i][k])) {
common_element = true;
break;
}
}
if (! common_element) {
print_array(a[i],sizes[i]);
}
}
}
int main() {
int s = 3;
int sizes[] = {3,4,3};
int **a = malloc(sizeof(int*)*3);
for (int i=0; i<s; i++) {
a[i] = malloc(sizeof(int*)*sizes[i]);
}
a[0][0] = 2;
a[0][1] = 3;
a[0][2] = 4;
a[1][0] = 4;
a[1][1] = 7;
a[1][2] = 8;
a[1][3] = 9;
a[2][0] = 5;
a[2][1] = 44;
a[2][2] = 12;
f(a,s,&sizes);
}
#包括
#包括
#包括
无效打印_数组(整数*a,整数大小){
int i;
对于(i=0;i您是如何获取输入的?从文件中?从stdin
?请给出获取输入的代码示例以及您尝试消除冗余的算法。因此:当您找到一个或多个匹配元素时,您不想打印整个数组,包括不匹配的元素?请对引用数组进行排序。Bin搜索查找。大多数人都错过了这一点。这是一场一次告诉一个人的战斗。:)向前支付,传播信息