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

Przyspieszenie programu

42 Warsaw Coding Academy
0 głosów
655 wizyt
pytanie zadane 31 grudnia 2016 w C i C++ przez czujek22 Dyskutant (7,670 p.)
edycja 31 grudnia 2016 przez czujek22

Witam. Robię zadanie Gra Euklidesa ze Spoj.com i skończyłem je. Chyba działa, pewnie można to zrobić w prostszy sposób ponieważ spoj pokazuje, że program wykonuje się zbyt wolno o 0,01s :D Jak można go przyspieszyć ?

 

#include <iostream>

using namespace std;

int main()
{
    int ile;
    int I_gracz,II_gracz;
    int mniejsza;
    int dodatek1 = 0, dodatek2 = 0;

    cin>>ile;

    for(int i=0; i<ile; i++)
    {
        cin>>I_gracz>>II_gracz;

        while((I_gracz - dodatek1) != (II_gracz - dodatek2))
        {
            if (I_gracz<II_gracz)
            {
               mniejsza = I_gracz;
               I_gracz +=mniejsza;
                dodatek1 = mniejsza;
                II_gracz -=mniejsza;
            }
            else if(I_gracz>II_gracz)
            {
                mniejsza=II_gracz;
                II_gracz +=mniejsza;
                dodatek2 = mniejsza;
                I_gracz -=mniejsza;
            }
        }
        if((I_gracz - dodatek1)==(II_gracz-dodatek2))
            cout<<(I_gracz - dodatek1)+(II_gracz-dodatek2)<<endl;

    }

    return 0;
}

 

komentarz 31 grudnia 2016 przez Pajdas Mądrala (5,930 p.)
Może wystarczy zamiast else if(I_gracz>II_gracz) dać po prostu else...

Myślę, że o 0,01s przyspieszy :)

0,01s to jest tak mało, że kwestia temperatury ramu i procka może dużo zmienić

1 odpowiedź

0 głosów
odpowiedź 31 grudnia 2016 przez morele123 Gaduła (4,790 p.)
Co ty robisz z tym dodatek ? Przecież masz podać tylko liczbę żetonów w grze.

a - żetony 1. gracza, b - żetony 2. gracza.

a>b:

a=a-b

b>a

b=b-a

 

I powtarzasz aż a=b.

Po za tym nie rób else if, jeżeli wystarczy samo else.
komentarz 31 grudnia 2016 przez VirtualMember Pasjonat (15,790 p.)
Nie wiem czy w tym zadaniu tak ma być ale jak zrobi else to będzie inne działanie programu. Zobacz, że ma w jednym przypadku zbiór (-nsk; 0) a w drugim (0; +nsk) więc nie rozpatruje zera.
komentarz 31 grudnia 2016 przez morele123 Gaduła (4,790 p.)
Nie analizowałem, za bardzo jego kodu, nie zwracałem uwagi na przypadki graniczne. Po za tym, ten jeden if jest mało ważny, więc może zostać. Chodzi głównie o to, że zapamiętuje to co jest nie potrzebne, czyli jakiś dodatek.
komentarz 31 grudnia 2016 przez czujek22 Dyskutant (7,670 p.)

dodatki robily tu jako części żetonów, których przeciwnik nie może pobierać. Polecenie mnie troche wkręciło w inny tok myślenia ale wykonałem to tym prostszym sposobem który podałeś.

komentarz 31 grudnia 2016 przez morele123 Gaduła (4,790 p.)
Czyli zapamiętywałeś żetony, które nie są w grze. Jednak po co do tego aż dwie zmienne.

Podobne pytania

0 głosów
2 odpowiedzi 1,227 wizyt
pytanie zadane 7 marca 2017 w C i C++ przez styrczu Obywatel (1,050 p.)
0 głosów
1 odpowiedź 627 wizyt
0 głosów
0 odpowiedzi 133 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez kamyk2 Początkujący (420 p.)

93,383 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,744 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
...