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

C++
Se citesc 2 vectori ordonati crescator.Afisati alt vector ordonat crescator cu elementele celor 2 vectori cititi fara a repeta elementele.


andrei750238: Vezi functia de merge din merge sort.

Răspunsuri la întrebare

Răspuns de oanaroxana3
1

Răspuns:#include <iostream>

using namespace std;

const int MAX_LENGTH = 100000;

int main() {

   int n, m, v[MAX_LENGTH + 1], w[MAX_LENGTH + 1];

   cin >> n;

   for (int i = 1; i <= n; ++i) {

       cin >> v[i];

   }

   cin >> m;

   for (int i = 1; i <= m; ++i) {

       cin >> w[i];

   }

   int i = 1, j = 1;

   while (i <= n && j <= m) {

       if (v[i] < w[j]) {

           cout << v[i] << " ";

           ++i;

       } else {

           cout << w[j] << " ";

           ++j;

       }

   }

   while (i <= n) {

       cout << v[i] << " ";

       ++i;

   }

   while (j <= m) {

       cout << w[j] << " ";

       ++j;

   }

   return 0;

}

Explicație:


VxF: Frumos și eficient, dar am impresia că prin „fara a repeta elementele” enunţul solicită evitarea introducerii de duplicate în caz că o valoare figurează în ambii vectori. Pentru asta ajunge să adaugi în while-ul mare o ramificaţie care afișează o singură dată, dar avansează în ambii vectori:
if (v[i] == w[j]) {
cout << v[i] << " ";
++i;
++j;
}
oanaroxana3: Da, asa este. Multumesc pentru observatie!
Alte întrebări interesante