Gra Euklidesa

0

Witam, jestem nowy. Potrzebuję wskazówki na temat tego zadania, poniżej udostępniam swój kod.

http://pl.spoj.com/problems/EUCGAME/

 #include <iostream>

using namespace std;


int main()
{
    int t, a[0] , b[0], wynik;
    cin>>t;
    for(int i=0; i<=t; i++)
   {
    cin>>a[i]>>b[i];
if (a[i]!=b[i])
    {
if(a[i]<b[i])
b[i]-a[i];
if(b[i]<a[i])
a[i]-b[i];
   }
       else
        {
       wynik=a[i]+b[i];
        cout<<wynik<<endl;
       }
       }
return 0;
}

1

Po co ci te tablice o zerowym rozmiarze? Zastąp je zwykłymi zmiennymi. Dodatkowo co w sytuacji gdy jeden gracz ma np 1000 żetonów a drugi 3? Tu trzeba pętli while (a != b), dodatkowo zalecam resztę z dzielenia. Znacznie przyśpieszy pracę programu.

3
  1. To nie jest poprawny kod C++, nie możesz definiować tablic z 0 elementami. (nie UB, ill-formed).
  2. Tragiczne formatowanie kodu. http://format.krzaq.cc jak sam nie umiesz
  3. http://4programmers.net/Pomoc/Forum_dyskusyjne/Dlaczego_nikt_nie_odpowiada_w_moim_w%C4%85tku
  4. sprawdź wyniki w porównaniu z przykładowymi, jest dobrze? Opisz szerzej problem
2

21:52 <@kq> o kurde
21:52 <@kq> odwrotne zagniezdzenie kodu
21:52 <@kq> :D
21:52 <@kq> im glebiej tym mniej tabow
via irc.

Kolego, to jest niepoważne. Przeczytaj pierwsze kilka stron bylejakiego kursu, potem zacznij pisać kod.

0

Wielkie dzięki za te miłe słowa otuchy dla początkującego programisty ;)
Chociaż gdybyście mi tak nie napisali to pewnie nie wziął bym tego do serca :)
Napisałem kod od nowa jakieś wskazówki, da się to jakoś usprawnić ? ;q

#include <iostream>

using namespace std;

int main()
{
    unsigned long long a, b;
    unsigned t = 0;
    cin >> t;
    while (t) {
        cin >> a >> b;
        while (a != b) {
            if (a < b)
                b -= a;
            else
                a -= b;
        }
        cout << a + b << endl;
        t--;
    }
    return 0;
}
 
1

Możesz go przyśpieszyć resztą z dzielenia, o tak

#include <iostream>

using namespace std;

int main ()
{
    int ilezest;
    cin >> ilezest;
    while (ilezest--)
    {
        int a,b;
        cin >> a;
        cin >> b;
        while (a!=b&&a>0&&b>0)
        {
            if (a<b)
            {
                //cout << "przed zamianą " << a << "oraz " << b << endl;
                int temp;
                temp=a;
                a=b;
                b=temp;
               // cout << "po zamianie " << a << "oraz " << b << endl;
            }


            //cout << "a to " << a << "zaś b to " << b << endl;
            if (a%b!=0)
            {
                int c=0,d=0;
                c=(a%b);
                d=(a-c)/b;
              //  cout << "c to " << c << "zaś d to " << b << endl;
                if (d!=1) a=a-(b*d);
                else a= a-b;
            }
            else a=b;

        }
        cout << a+b << "\n";

        }
    }

Dzięki powyższemu kodowi dostaniesz maksimum punktów czyli 15

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