C语言编写程序:题目描述 给你两个序列,长度相等 请找出两个序列中共同出现的元素 由于有多种输出方式,这里我们要求按照所有共同出现的元素从小到大顺序输出,如果重复多次,也只用输出一次,如果一个共同出现的数都没有,输出0即可。 题目保证序列中的元素一定是正整数 输入 第一行一个正整数t,表示有t组数据 每一组第一行一个正整数n,表示序列的长度,序列长度不超过100 每一组第二行和第三行分别为两个序列的元素,序列中每个元素都不超过100, 输出 每一组数据输出两个序列中共同出现的元素
时间: 2024-02-21 07:57:24 浏览: 153
国内C语言教材中常见的两个错误.pdf
以下是这道题的C语言解法,请参考:
```c
#include <stdio.h>
#include <string.h>
int main()
{
int t;
scanf("%d", &t);
while (t--) {
int n, a[100], b[100], c[101];
memset(c, 0, sizeof(c)); // 初始化计数数组
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]);
}
for (int i = 0; i < n; i++) {
c[a[i]]++; // 计数数组中对应元素加1
c[b[i]]++;
}
int flag = 0; // 标记是否有共同元素
for (int i = 1; i <= 100; i++) { // 遍历计数数组
if (c[i] == 2) { // 如果该元素在两个序列中都出现过
printf("%d ", i); // 输出该元素
flag = 1;
}
}
if (!flag) { // 如果没有共同元素
printf("0");
}
printf("\n"); // 换行
}
return 0;
}
```
解析如下:
1. 首先读入数据组数`t`。
2. 对于每一组数据,定义三个数组:`a`和`b`分别存储两个序列中的元素,`c`为计数数组,初始值为0。
3. 读入序列中的元素,同时在计数数组`c`中对应的元素加1。
4. 遍历计数数组,如果某个元素在两个序列中都出现过,则输出该元素。
5. 如果没有共同元素,输出0。
6. 注意每组数据输出完后要换行。
阅读全文