Mam problem z zadaniem - Napisz program, który wypisuje
tylko te liczby, które występują w obu plikach. Można założyć, że liczby w ramach jednego pliku są różne. Dodatkowo liczby są posortowane .
Nie wiem jak napisać część odpowiadającą za porównywania liczb nie mam pomysłu innego niż porównywanie ich indeksów ale wiem że to jest błędne .
0
1
Wczytaj je do zbiorów, a potem Użyj std::set_intersection
1
Poczytaj o metodzie Merge
i na podstawie przeczytanego łatwo skombinujesz własną metodę - na takę wypisywane koszt pamięciowy O(1)
1
Skoro pliki są posortowane, to jest to całkiem proste i liniowe względem ich długości:
- Czytasz po 1 liczbie z każdego pliku (
a
ib
) - Porównujesz je:
- jeśli są równe to wypisujesz i czytasz z obu plików
- jeśli są różne to czytasz następną liczbę z pliku, w którym była mniejsza
- wracasz do punktu 2
1
Zadanie jest proste jak konstrukcja cepa.
Zmieściłem się w 25 liniach licząc wszystko (puste linie, include), bez ścieśniania lub innego zaciemniania (używając std::set_intersection
).
IMO po odpowiedzi @lion137 powinien być koniec tematu (a sam coś dopisuje :)).
0
- Wczytaj pierwszą liczbę z pliku 1
- Wczytaj pierwszą liczbę z pliku 2
- Porównaj liczby:
3.1 Jeżeli (liczba z pliku 1 == liczba z pliku 2) => wpisujesz do pliku 3 oraz wczytujesz następne liczby z obu plików
3.2 Jeżeli (liczba z pliku 1 < liczba z pliku 2) => wczytaj kolejną liczbę z pliku 1
3.3 Jeżeli (liczba z pliku 1 > liczba z pliku 2) => wczytaj kolejną liczbę z pliku 2 - Sprawdź czy nie doszedłeś do końca, któregoś z plików przerwij