1 / 6
Aug 2017

http://pl.spoj.com/problems/PP0501A/2
mam problem z zadaniem powyżej
Nie działa mi przykład 48 100... wykazuje wynik 25. Podpowiecie co zrobiłem źle?
#include

using namespace std;
int nwd(int a, int b);

int main()
{
    int liczba_testow;
    cin>>liczba_testow;
    for(int i=0; i<liczba_testow; i++)
    {
        int a,b;
        cin>>a>>b;
        cout<<nwd(a,b)<<endl;
    }
    return 0;
}
int nwd(int a, int b)
{
    int wynik=0;
    if(a==1 || b==1) wynik=1;
    else if(a>b)
    {
        int x=1;
        for(int i=0; i<b; i++)
        {
            if(a%x==0)
            {
                wynik=x;
            }
            x++;
        }
    }
    else if(b>a)
    {
        int x=1;
        for(int i=0; i<a; i++)
        {
            if(b%x==0)
            {
                wynik=x;
            }
            x++;
        }
    }
    return wynik;
}
  • created

    Aug '17
  • last reply

    Aug '17
  • 5

    replies

  • 551

    views

  • 3

    users

  • 1

    link

chyba byłoby łatwiej, co dobrze :slight_smile:

algorytm NWD jest dokładnie opisany (jakby nie było, jest znany od ponad 2300 lat, niestety nie tobie), bez problemu znajdziesz w internecie

ja wiem, że jest takowy algorytm ale chciałem wymyśleć może coś własnego jak rozwiazać ten problem.

To tak jak byś chciał na nowo odkryć koło. Korzystaj z dorobku ludzkości i starych algorytmów by rozwiązywać nowe problemy, nie wymyślaj nowych algorytmów dla starych problemów.

dlaczego ma nie wymyślać nowych ? byle były dobre :slight_smile:

oczywiście w przypadku NWD to raczej nie ma sensu, bo skoro nikt przez 2300 lat nie wymyślił lepszego algorytmy, to pewnie lepszego nie ma