Witam mam oto takie zadanie z cpp, ale nie do końca mi wychodzi poprawny wynik i nie wiem co jest źle
zadanie
Nazewnictwo: seria, to możliwie najdłuższy fragment tablicy (może być gdziekolwiek w tablicy i dowolnej niezerowej długości), który jest już posortowany (zawsze dane
w tablicy tworzą zbiór rozłącznych serii i ten zbiór serii „zajmuje” całą tablicę).
Mamy dane w tablicy wejściowej 1 (w postaci wielu serii) i w tablicy wejściowej 2
(w postaci wielu serii). Połącz każdą parę (z obu tablic) serii wejściowych w jedną (kolejną) serię tablicy wyjściowej 3 według poniższego algorytmu.
założenie upraszczające – na niższą ocenę: w obu tablicach jest po tyle samo serii, kolejne założenie upraszczające – na jeszcze niższą ocenę: znamy liczbę par serii.
- łączenie (pary serii) w jedną serię:
- porównaj bieżący (pierwszy) element serii z tablicy 1 z bieżącym (pierwszym) elementem z tablicy 2.
- skopiuj mniejszy z tych elementów w bieżące (pierwsze) miejsce serii w tablicy 3.
- powtarzaj punkty a, b aż do wyczerpania jednej (z dwu) z serii wejściowych
- przekopiuj resztę z tej pary serii z tej „drugiej” tablicy do tablicy 3
- powtarzaj punkty 1 i 2 do wyczerpania wszystkich serii
przykład:
tab1: (kreskami zaznaczyłem rozdzielenia serii, ale algorytm sam powinien stwierdzić, czy następuje koniec jednej serii i początek następnej)
tab2:
krok 1
tab3:
a
krok 1
krok 1
krok 2
krok 1
itd.
kod
#include <iostream>
#include <vector>
using namespace std;
int main() {
//tworze 3 wektory
vector<char> tab1 = { 'a', 'p', 'r', 't', 'u', 'e', 'f', 'g', 'z', 'm' };
vector<char> tab2 = { 'b', 'n', 'd', 'v', 'k', 'o', 'w' };
vector<char> tab3 = {};//pusty wektor do którego bede dodwał elementy
int i = 0, j = 0;
for (int i = 0, j = 0; i < tab1.size() && j < tab2.size(); ) {
if (tab1[i] <= tab2[j]) {
tab3.push_back(tab1[i]);// dodaje element z tab 1 do wyniku
i++;
}
else {
tab3.push_back(tab2[j]);//dodaje element z tab2 do wyniku
j++;
}
}
for (char c : tab3) {
cout << c << " ";
}
return 0;
}