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

SPOJ upraszczanie ulamków

0 głosów
469 wizyt
pytanie zadane 26 lipca 2017 w SPOJ przez chucksqll Stary wyjadacz (12,930 p.)

WItam.

Robię zadanie ze spoja(link poniżej) no i niestety dla mnie mam przekroczony limit czasu, także zwracam się do was z prośbą o pomoc. Nie wiem jak bardziej mogę go uprościć, czy trzeba zrobić to zadanie inną drogą pomimo, że jak dla mnie wyraźnie jest napisane, że trzeba tą, która robiłem. Dziękuję za pomoc.

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

#include <iostream>


using namespace std;

int skracanie(int a, int b,int ilosc=1)
{
    if(a==b)
        return ilosc;
    if(a>b)

        return skracanie(a-b,b,++ilosc);
    if(b>a)

        return skracanie(a,b-a,++ilosc);
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a,b;
        char znak;
        cin>>a>>znak>>b;
        if((a==1)||(b==1))
        {
            if(a>b)
                cout<<a<<endl;
            if(b>a)
                cout<<b<<endl;
            if(a==b)
                cout<<"1"<<endl;

        }

        else
            cout<<skracanie(a,b)<<endl;


    }
    return 0;
}


 

2 odpowiedzi

0 głosów
odpowiedź 26 lipca 2017 przez Jedras Maniak (54,860 p.)
Można wykorzystać algorytm Euklidesa, ale zamiast odejmować można kombinować z dzieleniem.
0 głosów
odpowiedź 26 lipca 2017 przez d0n Mądrala (6,440 p.)
edycja 26 lipca 2017 przez d0n

Dalej w treści jest napisane, że " Niestety algorytm ten, oparty na odejmowaniu ma jedną dużą wadę. Czasami liczba odejmowań, jakie trzeba wykonać, jest tak duża, że lepiej pozostawić ułamek w spokoju," I jest to prawda, bo nieistotne, że sprawdziłeś czy a lub b nie są równe 1, skoro a może być równe 10^9, a b równe 2 i twój program wykona ~ miliard operacji, kiedy powinniśmy celować w co najwyżej dziesiątki milionów operacji. Zadanie polega wykorzystaniu operacji dzielenia i dzielenia z resztą ( '%' w c++ ), i polega na dodaniu jednej linijki kodu do algorytmu euklidesa (który z resztą też można zapisać w jednej linijce kodu)

Podobne pytania

0 głosów
1 odpowiedź 1,336 wizyt
pytanie zadane 19 października 2016 w C i C++ przez Paq_93 Początkujący (260 p.)
0 głosów
1 odpowiedź 3,447 wizyt
+1 głos
2 odpowiedzi 725 wizyt
pytanie zadane 1 marca 2016 w C i C++ przez cherubinek Nowicjusz (190 p.)

93,630 zapytań

142,554 odpowiedzi

323,055 komentarzy

63,136 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2174p. - dia-Chann
  2. 2153p. - DziarnowskiJ
  3. 2123p. - Łukasz Piwowar
  4. 2105p. - CC PL
  5. 2077p. - raydeal
  6. 1957p. - Maurycy W
  7. 1954p. - Adrian Wieprzkowicz
  8. 1895p. - rucin93
  9. 1887p. - Łukasz Eckert
  10. 1855p. - Michal Drewniak
  11. 1811p. - rafalszastok
  12. 1777p. - robwarsz
  13. 1588p. - Tomasz Bielak
  14. 1491p. - Rafał Trójniak
  15. 1377p. - ssynowiec
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...