Problem Euklidesa (Zadania OPSS) w c++


(Kontakt) #1

Tak zacząłem rozwiązywać zadania z OPSS i napisałem program do obliczania NWD (Największego Wspólnego Dzielnika). Wrzuciłem kod programu do "sprawdzacza" na OPSS i przeszedł poprawne 3 testy na 7. Mojej pytanie brzmi: "Gdzie wg. was zrobiłem błąd :wink:". Błąd w "sprawdzaczu" oznakowany jest jako: "Uruchamianie".

Kod programu:

#include 


using namespace std;


int nwd (int a, int b)

{

   while (b)

  {        

        if (a > b) a-=b;

        else b-=a;

  }

cout<
return a;


}



int main()

{

 int a,b;

 int ilosc; //ilość par liczb do pobrania oraz maxymalnego dzielnika

 cin>>ilosc; //pobranie ilości


for(int x=0;x
{

        cin>>a;

        cin>>b;

        nwd(a,b);

}

 system("pause");

 return 0; 


}

[/code]

[size=150]EDIT:[/size] Czyżby nikt nie potrafiłby mi pomóc ? :slight_smile:

[size=200]EDIT:[/size] Dobra, sam sobie poradziłem :slight_smile: Do zamknięcia :slight_smile:


(system) #2

Może lepiej to zrobić wg algorytmu Eukledesa, to co napisałeś jest ... (autocenzura)

bo nie wiem co znajduje, z cała pewnością nie NWD

int nwd (int a, int b)

  {

   while(b)

     {       

      int r=a%b;

      a=b;

      b=r;

     }

   return a;

  }

(Pokemaniak) #3

W kodzie masz funkcję która zwraca int i go wypisuje

int nwd (int a, int b)

{

   while (b)

  {       

        if (a > b) a-=b;

        else b-=a;

  }

cout<
return a;


}[/code]


A tu nie masz odbierania zwracanej liczby

[code]for(int x=0;x { cin>>a; cin>>b; nwd(a,b); }


(Szczepanskimarek) #4

Pozwolę się całkowicie nie zgodzić z powyższym stwierdzeniem. Algorytm Euklidesa ma dwie wersje z dzieleniem modulo oraz z odejmowaniem. Naprawde istnieją inne źródła niż wikipedia by można to sprawdzić. Polecam Cormen Thomas H., Leiserson Charles E., Rivest Ron "Wprowadzenie do algorytmów" (lub w starym wydaniu "Wstęp do algorytmów")