设两个集合A、B用顺序表表示,求A-B。 【输入形式】 第一行输入两个整数N、M(大于0小于100),分别表示两个集合的长度; 第二行输入第一个集合的N个元素; 第三行输入第二个集合的M个元素; 【输出形式】 输出第一个集合和第二个集合的差集。(若差集为空集,则输出*)
时间: 2023-05-30 08:02:21 浏览: 83
【样例输入】
5 3
1 2 3 4 5
2 4 6
【样例输出】
1 3 5
【样例输入】
4 4
1 2 3 4
1 2 3 4
【样例输出】
*
【样例输入】
10 5
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10
【样例输出】
1 3 5 7 9
【解题思路】
首先将集合A中的元素全部存入哈希表中,然后再遍历集合B,如果集合B中的元素在哈希表中不存在,那么就是A-B中的元素,将其输出即可。
相关问题
设两个集合A、B用顺序表表示,求A-B。 【输入形式】 第一行输入两个整数N、M(大于0小于100),分别表示两个集合的长度; 第二行输入第一个集合的N个元素; 第三行输入第二个集合的M个元素
设两个集合A、B用顺序表表示,求A-B的操作可以理解为从集合A中删除与集合B中相同的元素。具体步骤如下:
1. 首先,根据输入的N和M,创建两个长度分别为N和M的顺序表,分别表示集合A和集合B。
2. 将输入的第一个集合的N个元素依次存入集合A的顺序表中。
3. 将输入的第二个集合的M个元素依次存入集合B的顺序表中。
4. 遍历集合A的顺序表,对于每个元素,判断是否存在于集合B的顺序表中。
5. 如果存在,则将该元素从集合A的顺序表中删除。
6. 最后,输出剩余的集合A的顺序表中的元素,即为A-B。
C语言设两个集合A、B用顺序表表示,求A-B。 【输入形式】 第一行输入两个整数N、M(大于0小于100),分别表示两个集合的长度; 第二行输入第一个集合的N个元素; 第三行输入第二个集合的M个元素; 【输出形式】 输出第一个集合和第二个集合的差集。(若差集为空集,则输出*)用C语言顺序表
#include <stdio.h>
#define MAX_LEN 100
typedef struct {
int data[MAX_LEN];
int length;
} SqList;
void initList(SqList *L)
{
L->length = 0;
}
void inputList(SqList *L, int n)
{
int i;
for (i = 0; i < n; i++) {
scanf("%d", &L->data[i]);
}
L->length = n;
}
void printList(SqList L)
{
int i;
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int locateElem(SqList L, int e)
{
int i;
for (i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i;
}
}
return -1;
}
void deleteElem(SqList *L, int i)
{
int j;
if (i < 0 || i >= L->length) {
return;
}
for (j = i; j < L->length - 1; j++) {
L->data[j] = L->data[j+1];
}
L->length--;
}
void difference(SqList A, SqList B, SqList *C)
{
int i;
initList(C);
for (i = 0; i < A.length; i++) {
if (locateElem(B, A.data[i]) == -1) {
C->data[C->length++] = A.data[i];
}
}
}
int main()
{
SqList A, B, C;
int n, m;
scanf("%d%d", &n, &m);
inputList(&A, n);
inputList(&B, m);
difference(A, B, &C);
if (C.length == 0) {
printf("*\n");
} else {
printList(C);
}
return 0;
}
阅读全文