Wyznaczanie NWD wielu zmiennych.

0

witam mam problem z zadaniem, a mianowicie :

Dany jest następujący problem: pewien generator wyrzuca z siebie ciąg losowych liczb naturalnych. Co jakiś czas na wejściu pojawia się liczba 1. Należy wówczas wyliczyć największy wspólny dzielnik dwóch ostatnich liczb większych od 1, aby na końcu móc podać sumę wszystkich obliczonych w ten sposób wartości. Gdy na wejściu pojawia się 0, oznacza to, że generator zakończył swe działanie.

Wejście

Wejście składa się z ciągu liczb całkowitych. Każda liczba przyjmuje wartość od 0 do 30000, gdzie liczby od 2 do 30000 oznaczają kolejne wartości dane przez generator, liczba 1 oznacza rozkaz wyznaczenia NWD ostatnich dwóch liczb większych od 1, a 0 jest zawsze ostatnią liczbą pojawiającą się na wejściu.
Dwie pierwsze liczby są zawsze większe od 1 (czyli liczb na wejściu jest co najmniej 3).
Na wejściu nie pojawi się więcej niż 1 000 000 000 liczb.

Wyjście

Na wyjściu należy wypisać jedną liczbę całkowitą, która oznacza sumę wszystkich wyznaczonych największych wspólnych dzielników.

Przykład

Wejście:

5 5 4 4 1 5 5 1 4 4 1 1 1 5 4 3 2 1 0

Wyjście:

22

Sam program nie jest zabójczo trudny, lecz mam problem co do tych 1 000 000 000 liczb. tablica tutaj raczej się nie sprawdzi więc prosił bym o porady jak wybrnąć z tego problemu.

0

Ktoś miał identyczny problem kilka dni temu. Poszukaj, może zerżniesz od kogoś zadanie domowe i/ lub konkursowe.

0

liczba 1 oznacza rozkaz wyznaczenia NWD ostatnich dwóch liczb większych od 1

Czyli nigdy nie będziesz potrzebował przechować więcej, niż dwie ostatnio wprowadzone liczby. Do tego wystarczą dwie zmienne, ewentualnie tablica dwuelementowa.

0

siemka

zbyt skomplikowane to to nie jest
robisz tak:

tworzysz dwie tabele - jedną dwuelementową i jedną dynamiczną wieloelementową.
nasłuchujesz przyłążących liczb
i robisz takiego ifa:

jeżeli liczba <> 0 i <> 1 to ładuj ją do tablicy dwuelementowej (podmieniając ją z liczbą która była w tej tabeli jak pierwsza z tych dwóch które już tam istnieją - wyjątek stanowi tylko załadowanie dwóch pierwszych liczb)

jeżeli liczba = 1 - to oblicz NWD z liczb znajdujących się w tablisy dwuelementowej i dodaj do wyniku (wyniki zapisujesz w tablicy dynamicznej)

jeżeli liczba = 0 to END + podaj wynik

PS. w jakim langłidżu to piszesz ?

Pozdr,
tito

0

siemka

zbyt skomplikowane to to nie jest
robisz tak:

tworzysz dwie tabele - jedną dwuelementową i jedną dynamiczną wieloelementową.
nasłuchujesz przyłążących liczb
i robisz takiego ifa:

jeżeli liczba <> 0 i <> 1 to ładuj ją do tablicy dwuelementowej (podmieniając ją z liczbą która była w tej tabeli jak pierwsza z tych dwóch które już tam istnieją - wyjątek stanowi tylko załadowanie dwóch pierwszych liczb)

jeżeli liczba = 1 - to oblicz NWD z liczb znajdujących się w tablisy dwuelementowej i dodaj do wyniku (wyniki zapisujesz w tablicy dynamicznej)

jeżeli liczba = 0 to END + podaj wynik

PS. w jakim langłidżu to piszesz ?

0

ano właśnie
nie trzeba trzymać wyniku w tablicy - wsytarczy je na bieżąco sumować...
ech ta rutyna :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1