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

krotkie pytanie do programu w c++

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 27 marca 2019 w C i C++ przez Marcinek69 Początkujący (450 p.)
#include <iostream>

using namespace std;

int nwd(int a, int b)
{
    int c, devider=1;
    double bD=b, aD=a;

    if(b<a)c=b;
    if(b>=a)c=a;

    for(int i=2;i<=c;i++)
    {
        if(bD/i == b/i && aD/i==a/i)
        {
            if(b>devider && a>devider)
            {
                devider = i;
            }
        }
    }
    return devider;
}

int main()
{
    int t,a,b;
    cin >> t;
    for(int i=0; i<t; i++)
    {
        cin >> a >> b;
        cout << nwd(a,b);
    }
    return 0;
}

Kod ten dziala, ale jak zrobic zeby wpierw zostaly wpisane wszystkie dane i na koniec wyswietla sie wszystkie odp ? Wiem że moge zwracaj wartosci i zapisywac w tablicy a potem wyswietlic zawartosc tablicy i wiem ze to by działało(tzn no domyslam sie xd), ale naprawde to jest najprostrzy i najlepszy sposob i niema lepszego ?

1 odpowiedź

0 głosów
odpowiedź 27 marca 2019 przez Marcinek69 Początkujący (450 p.)
#include <iostream>

using namespace std;

int nwd(int a, int b)
{
    int c, devider=1;
    double bD=b, aD=a;

    if(b<a)c=b;
    if(b>=a)c=a;

    for(int i=2;i<=c;i++)
    {
        if(bD/i == b/i && aD/i==a/i)
        {
            if(b>devider && a>devider)
            {
                devider = i;
            }
        }
    }
    return devider;
}

int main()
{
    int t,a,b;
    int *tab;
    cin >> t;
    tab = new int [t];
    for(int i=0; i<t; i++)
    {
        cin >> a >> b;
        tab[i] = nwd(a,b);
    }
    for(int i=0; i<t; i++)
    {
        cout<<*tab<<endl;
        tab++;
    }
    delete [] tab;
    return 0;
}

Kod z użyciem tej tablicy, wsumie jak tak myślę to może i nie jest to aż takie zle, wkońcu jest dynamiczne alokowanie pamięci więc nie bede marnować pamięci na ustalanie sztywno za duzej dlugosci tablicy

 

komentarz 27 marca 2019 przez Marcinek69 Początkujący (450 p.)

Przekroczono limit czasu... Wie ktos jak poprawić ten program żeby spoj go zaliczyl ? Zadanie do spoja : https://pl.spoj.com/problems/PP0501A/

komentarz 27 marca 2019 przez Marcinek69 Początkujący (450 p.)
CPP14-CLANG się udało zmiescić w czasie a w C++ 4.3.2 niezliczało... szkoda gadać xD
komentarz 27 marca 2019 przez niezalogowany

BTW masz strasznie nieoptymalny algorytm. Poczytaj o algorytmie Euklidesa. Poza tym naruszasz nie swoją pamięć:

    tab = new int [t];    
    //...
    for(int i=0; i<t; i++)
    {
        cout<<*tab<<endl;
        tab++;
    }
    delete [] tab;

Przesuwanie wskaźnika jest złe, bo nie wskazuje już on na początek tablicy. Czyli nie dość, że narażasz się na segfault to również nie zwalniasz pamięci.

komentarz 27 marca 2019 przez Marcinek69 Początkujący (450 p.)
Ostatecznie zrezygnowałem z tego i zrobiłem zwykłą tablice. Dzięki poczytam ;)
komentarz 27 marca 2019 przez niezalogowany

Nie musisz rezygnować z dynamicznie alokowanej tablicy - wystarczy poprawnie ją używać i nie przesuwać oryginalnego wskaźnika tylko jakiś inny.

    for (int i=0; i<t; i++)
    {
        cout<<tab[i]<<endl;
    }

    for (int* wsk=tab; wsk < tab + t; ++wsk) // opcjonalnie żeby poćwiczyć użycie wskażników
    {
        cout<<*wsk<<endl;
    }
    delete[] tab;

Chociaż taki kontener std::vector jest znacznie wygodniejszy.

Podobne pytania

0 głosów
2 odpowiedzi 441 wizyt
pytanie zadane 6 listopada 2020 w C i C++ przez MONKNOW Użytkownik (720 p.)
–1 głos
1 odpowiedź 100 wizyt
pytanie zadane 15 stycznia 2018 w C i C++ przez Artur313 Użytkownik (790 p.)
0 głosów
1 odpowiedź 167 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...