Scrieţi o aplicaţie C/C++ in care plecând de la două şiruri de numere naturale să se obţină un al treilea şir care să conţină toate elementele şirurilor sursă fără a se repeta, aranjate în ordine crescătoare.

Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int main()

{

int u[1000], v[1000], m, n, i, j, a[2000], k = 1, aux;

// citirea primului sir de elemente

cin >> m;

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

 cin >> u[i];

// citirea celui de-al doilea sir de elemente

cin >> n;

for (j = 1; j <= n; j++)

 cin >> v[j];

// sortarea crescatoare a primului sir

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

{

 for (j = i + 1; j <= m; j++)

 {

  if (u[i]>u[j])

  {

   aux = u[i];

   u[i] = u[j];

   u[j] = aux;

  }

 }

}

// sortarea crescatoare a celui de-al doilea sir

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

{

 for (j = i + 1; j <= n; j++)

 {

  if (v[i]>v[j])

  {

   aux = v[i];

   v[i] = v[j];

   v[j] = aux;

  }

 }

}

i = 1;

j = 1;

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

{

 if (u[i]<v[j])

  a[k++] = u[i++];

 else

 {

  if (u[i]>v[j])

   a[k++] = v[j++];

  else

  {

   a[k++] = u[i++];

   j = j + 1;

  }

 }

}

while (i <= m)

 a[k++] = u[i++];

while (j <= n)

 a[k++] = v[j++];

// afisarea vectorului obtinut conform cerintei

for (i = 1; i < k; i++)

 cout << a[i] << " ";

return 0;

}

Explicație:

Pentru a sorta crescator/descrescator elementele a doi vectori (interclasare) trebuie ca acestia sa fie sortati, nu conteaza cum. In cazul acesa, vectorii au fost sortati crescator, dar puteau sa fie sortati si descrescator sau putea sa fie unul sortat crescator, iar celalalt descrescator. Dupa aceasta etapa, a inceput parcurgerea simultana a vectorilor (sau interclasarea), in care comparam elementele primului vector cu cele din celalalt vector. Astfel se creeaza un al treilea vector, sortat crescator, care trebuie afisat. De asemenea, intrucat dimensiunea maxima a vectorilor nu este precizata, am pus 1000 pentru fiecare, astfel ca dimensiunea maxima a celui de-al treilea vector este 1000+1000=2000.