• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

NWD - algorytm

42 Warsaw Coding Academy
0 głosów
575 wizyt
pytanie zadane 1 stycznia 2016 w C i C++ przez agre Użytkownik (550 p.)
while (b)
        swap(a %= b, b);
    return a;

 

Ten algorytm wyznacza NWD, ale kompletnie go do końca zrozumieć. Tzn, wcześniej usiłowałam zrobić to za pomocą modulo i dwóch if, ale nie był to zbyt optymalny kod.

while (b) // co oznacza ten zapis, na jakiej zasadzie pętla jest zależna od b?

swap(a %= b, b); //dzięki modulo na samym końcu, wychodzi wynik i 0. Matematycznie wszystko wygląda w porządku, ale sama praca pętli już nie jest taka jasna.

Czy ktoś mógłby pomóc mi to rozszyfrować? :)

1 odpowiedź

0 głosów
odpowiedź 1 stycznia 2016 przez niezalogowany
wybrane 2 stycznia 2016 przez agre
 
Najlepsza
W C/C++ wartości różne od 0 oznaczają true, czyli tutaj pętla while wykonuje się dopóki b != 0.

Tutaj masz najpierw wykonanie działania modulo (oraz przypisanie wyniku do zmiennej a), następnie wartości zmiennych a i b są zamieniane ze sobą.
komentarz 1 stycznia 2016 przez niezalogowany

Alternatywny sposób zapisu tego samego kodu:

while( b != 0)
{
  a = a % b;
  swap( a, b );
}

 

Podobne pytania

0 głosów
0 odpowiedzi 853 wizyt
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 21 marca 2017 w SPOJ przez chucksqll Stary wyjadacz (12,930 p.)
0 głosów
1 odpowiedź 448 wizyt
pytanie zadane 15 grudnia 2022 w SPOJ przez Pan_Blazej Nowicjusz (180 p.)

93,396 zapytań

142,389 odpowiedzi

322,570 komentarzy

62,756 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...