Informatică, întrebare adresată de vinxie, 8 ani în urmă

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

Răspuns de Sergetec
1

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;

}


vinxie: Mulțumesc mult.
Alte întrebări interesante