写一段c语言程序 找共同 题目描述 给你两个序列,长度相等 请找出两个序列中共同出现的元素 由于有多种输出方式,这里我们要求按照所有共同出现的元素从小到大顺序输出,如果重复多次,也只用输出一次,如果一个共同出现的数都没有,输出0即可。 题目保证序列中的元素一定是正整数 输入 第一行一个正整数t,表示有t组数据 每一组第一行一个正整数n,表示序列的长度,序列长度不超过100 每一组第二行和第三行分别为两个序列的元素,序列中每个元素都不超过100, 输出 每一组数据输出两个序列中共同出现的元素
时间: 2024-02-11 14:09:20 浏览: 158
国内C语言教材中常见的两个错误.pdf
好的,以下是一段 C 语言的代码实现,使用哈希表来实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXN 100
bool appeared[101];
int compare(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n, a[MAXN], b[MAXN], common[MAXN];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
int cnt = 0;
for (int i = 0; i < 101; i++) {
appeared[i] = false;
}
for (int i = 0; i < n; i++) {
if (!appeared[a[i]]) {
appeared[a[i]] = true;
for (int j = 0; j < n; j++) {
if (b[j] == a[i]) {
common[cnt++] = a[i];
break;
}
}
}
}
if (cnt == 0) {
printf("0\n");
} else {
qsort(common, cnt, sizeof(int), compare);
for (int i = 0; i < cnt; i++) {
printf("%d ", common[i]);
}
printf("\n");
}
}
return 0;
}
```
这段代码首先定义一个 `appeared` 数组来记录每个数是否出现过。然后遍历第一个序列,对于每个元素,如果它没有出现过,则将它标记为出现过,并遍历第二个序列,查找是否有相同的元素,如果有,则将它加入一个 `common` 数组中。最后将 `common` 数组排序,并输出其中的元素。
这里使用了 `qsort` 函数来对 `common` 数组进行排序。如果你不想使用标准库函数,也可以手写一个排序算法来实现。
阅读全文