用c语言描述 输入两个数组(数组元索个数6和8) ,输出在两个数组中都出现的元素 输入描述 输入共2行,第1行6个整数,第2行8个整数,每行中整数之间使用空格隔开,所有整数不超过int范围。 输出描述 每行一个共同元素,升序输出。
时间: 2024-09-16 17:05:22 浏览: 42
c语言编程题之数组操作合并两个有序数组.zip
在C语言中,你可以通过遍历两个数组,并使用哈希集合来找出同时出现在两个数组中的元素。下面是一个简单的步骤说明:
1. 定义一个`unordered_set<int>`或`stdbool`用于存储第一个数组中的元素,因为它们的唯一性有助于快速查找。
2. 遍历第一个数组(假设名为`array1`),将每个元素添加到哈希集合中。
3. 初始化一个结果数组`common_elements`,并设置一个临时变量`current_number`来保存当前找到的公共元素。
4. 再次遍历第二个数组(假设名为`array2`):
a. 对于`array2`中的每个元素,检查它是否在哈希集合中存在。如果存在,说明找到了一个公共元素,将其添加到`common_elements`数组,并更新`current_number`。
5. 检查`current_number`是否仍然有效(即在遍历过程中有新的公共元素发现),如果是,则将其添加到输出。
6. 当遍历完第二个数组后,对`common_elements`排序,然后逐个打印出元素。
以下是伪代码形式的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <unordered_set>
void find_common(int array1[], int n1, int array2[], int n2) {
unordered_set<int> set1;
// 添加第一个数组元素到哈希集合
for (int i = 0; i < n1; i++) {
set1.insert(array1[i]);
}
bool current_number = false;
int common_elements[n2];
int count = 0;
// 检查第二个数组元素是否存在于哈希集中
for (int i = 0; i < n2; i++) {
if (set1.find(array2[i]) != set1.end()) {
common_elements[count++] = array2[i];
current_number = true;
} else if (current_number) {
break; // 如果上一次找到了,现在没找到,跳出循环
}
}
// 排序并输出结果
qsort(common_elements, count, sizeof(int), compare_ints);
for (int i = 0; i < count; i++) {
printf("%d ", common_elements[i]);
}
}
// 自定义排序函数,这里省略
// compare_ints(int a, int b)
int main() {
int array1[6] = {1, 2, 3, 4, 5, 6};
int array2[8] = {2, 3, 4, 7, 8, 9, 10, 11};
find_common(array1, 6, array2, 8);
return 0;
}
```
阅读全文