Se citesc de la tastatură două mulțimi de numere întregi. Afișați intersecția, reuniunea și diferența dintre cele două mulțimi.
Răspunsuri la întrebare
Salut!
Ai rezolvarea in C++ mai jos
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 200001;
int n, m, a[N], b[N], fin[N], cnt;
void reuniune(int x[], int y[], int l1, int l2, int rez[]) {
int i = 1, j = 1;
while (i <= l1 && j <= l2) {
if (x[i] == y[j]) {
rez[++cnt] = x[i];
i++;
j++;
}
else if (x[i] < y[j]) {
rez[++cnt] = x[i];
i++;
}
else {
rez[++cnt] = y[j];
j++;
}
}
while (i <= l1) {
rez[++cnt] = x[i];
i++;
}
while (j <= l2) {
rez[++cnt] = y[j];
j++;
}
// for (int k = 1; k <= cnt; ++k) {
// cout << rez[k] << " ";
// }
}
void intersectare(int x[], int y[], int l1, int l2, int rez[]) {
int i = 1, j = 1;
while (i <= l1 && j <= l2) {
if (x[i] == y[j]) {
rez[++cnt] = x[i];
i++;
j++;
}
else if (x[i] < y[j]) {
i++;
}
else {
j++;
}
}
// for (int k = 1; k <= cnt; ++k) {
// cout << rez[k] << " ";
// }
}
void diferenta(int x[], int y[], int l1, int l2, int rez[]) {
int i = 1, j = 1;
while (i <= l1 && j <= l2) {
if (x[i] == y[j]) {
i++;
j++;
}
else if (x[i] < y[j]) {
rez[++cnt] = x[i];
i++;
}
else {
j++;
}
}
while (i <= l1) {
rez[++cnt] = x[i];
i++;
}
// for (int k = 1; k <= cnt; ++k) {
// cout << rez[k] << " ";
// }
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
for (int i = 1; i <= m; ++i) {
cin >> b[i];
}
sort(a + 1, a + n + 1);
sort(b + 1, b + m + 1);
intersectare(a, b, n, m, fin);
cout << "Intersectia multimilor A si B:\n";
for (int i = 1; i <= cnt; ++i) {
cout << fin[i] << " ";
fin[i] = 0; //resetare vector
}
cnt = 0; //resetare cnt global
cout << '\n';
reuniune(a, b, n, m, fin);
cout << "Reuniunea multimilor A si B:\n";
for (int i = 1; i <= cnt; ++i) {
cout << fin[i] << " ";
fin[i] = 0; //resetare vector
}
cnt = 0; //resetare cnt global
cout << '\n';
diferenta(a, b, n, m, fin);
cout << "Diferenta multimilor A si B:\n";
for (int i = 1; i <= cnt; ++i) {
cout << fin[i] << " ";
}
return 0;
}