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

zadanie z spoja cukiernik, moj algorytm nie chce dzialac poprawnie

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

using namespace std;

int main()
{
    int N; //liczba zestawow danych
    double a,b;
    int aInt,bInt;

    cin >> N;
    for(int i=0; i<N; i++)
    {
        cin >> a >> b; // a=<10;inf) b<1;30>
        aInt = a;
        bInt = b;
        for(int i=0; i<6; i++)
        {
            if((b/2==bInt/2) && (a/2==aInt/2))
            {
                b=b/2;
                a=a/2;
            }
            if((b/3==bInt/3) && (a/3==aInt/3))
            {
                b=b/3;
                a=a/3;
            }
            if((b/5==bInt/5) && (a/5==aInt/5))
            {
                b=b/5;
                a=a/5;
            }
            if((b/7==bInt/7) && (a/7==aInt/7))
            {
                b=b/7;
                a=a/7;
            }
            if((b/11==bInt/11) && (a/11==aInt/11))
            {
                b=b/11;
                a=a/11;
            }
            if((b/13==bInt/13) && (a/13==aInt/13))
            {
                b=b/13;
                a=a/13;
            }
            if((b/17==bInt/17) && (a/17==aInt/17))
            {
                b=b/17;
                a=a/17;
            }
            if((b/19==bInt/19) && (a/19==aInt/19))
            {
                b=b/19;
                a=a/19;
            }
            if((b/23==bInt/23) && (a/23==aInt/23))
            {
                b=b/23;
                a=a/23;
            }
            if((b/29==bInt/29) && (a/29==aInt/29))
            {
                b=b/29;
                a=a/29;
            }
        }
        cout<<"a="<<a<<endl;
        cout<<"b="<<b<<endl;
        cout<<a*b<<endl;
    }
    return 0;
}

Witam, mam pytanie do tego zadania : https://pl.spoj.com/problems/PRZEDSZK/ 

Wiem  że te zadanie albo podobne robil juz Pan Zelent ale nie chce sprawdzić gotowego kodu bo lubię wiedzieć dlaczego coś co powinno działać (moim zdaniem) nie działa.

Kod nie jest jeszcze do konca przystosowany do wyslania, musze go jeszcze przerobić ale mi chodzi o sam algorytm, dlaczego nie działa ? Tak, wiem (a tak mi sie przynajmniej wydaje) że ten sposob wyznaczania najwiekszej wspolnej wielokrotnosci nie jest napewno najlepszy ale do tego zadania powinien dzialac (b<=30).

 

1 odpowiedź

0 głosów
odpowiedź 24 marca 2019 przez Mateusz Pawlak Użytkownik (960 p.)

No ja bym ten kod uprościł w ten sposób:

 

#include <iostream>
 
using namespace std;
 
int main()
{
    int N; //liczba zestawow danych
     int a,b, ileCukierkow;
     int wspolnyDzielnik;
 
    cin >> N;
    for(int i=0; i<N; i++)
    {
        cin >> a >> b; 
    for(int i=2 ;  ; i++)
     {
            if( a%i == 0 && b%i==0)
             {
                     wspolnyDzielnik = i;
                     break;
             }
     }
    for(int i =0; ; i++)
    {
         if((wspolnyDzielnik * i) > b){
             ileCukierkow = wspolnyDzielnik*i
             break;
          }
     }

Niestety trudno połapać sie w twoim kodzie wiec nie wskaże ci błędu. Po prostu nie wiem jaki był twoj tok myślenia.

komentarz 24 marca 2019 przez Marcinek69 Początkujący (450 p.)
Mój plan był taki że biorę wszystkie możliwe dzielniki liczby mniejszej niż 30 (b o ile dobrze pamietam ma byc mniejsza badz rowna 30) a więc mam 2,3,5,7... itd, mam to w kodzie. I później za pomocą tych if'ow szukam liczb które jesli podziele liczbe zmiennoprzecinkowa (a,b) przez calkowita(aInt,bInt) to da tą samą wartosc (porownuje je) więc to znaczy że ta liczba jest dzielnikiem liczby (a badz b) Mam postawione && ponieważ jesli obie wartosci a i b sa dzielnikami ktores z tych liczb (2,3,5...) to dziele je przez siebie. No i takim sposobem chcialem dojsc do liczby a i b bez wspolnych dzielnikow i wtedy je pomnożyć i powinnien byc wynik. I ten caly proces ma sie powtarzac 6 razy (nawet gdyby to b=30 to wsumie powinno starczyc mniej niz 6 powtorzen ale trudno juz, to nie zaszkodzi). Zrozumiales juz cos? Sorry, ale ja kompletnie nie umiem tlumaczyć pisząc xD
komentarz 24 marca 2019 przez Mateusz Pawlak Użytkownik (960 p.)
Mniej wiecej rozumiem, ale proponuje porzucic ten projekt w takiej formie. Sam niedawno zacząłem przygode z programowaniem i z całego serca polecam szukac rozwiązan uniwersalnych. Powiedzmy że twój kod działa, tyle że chcesz teraz sprawdzic to samo dla większej liczby osob w grupach (powiedzmy do 100 i do 300) same ify bedziesz pisał poł dnia ;) w przypadku mojego rozwiązania nie musisz nic zmieniać. po prostu podajesz dowolne dwie liczby całkowite. Proponuje sprawdzic poprawność mojego kodu i jeśli wszystko jest ok spróbowac go zrozumieć. W razie pytań pisz tutaj

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

@Mateusz Pawlak, teraz jak mysle to troche to zle zrobilem, bo wynikiem będzie iloczym wspolnych dzielnikow... xD Ale tak czy siak wylicza mi te a i b zle, nie tak jakbym chcial ;/ 

komentarz 24 marca 2019 przez Marcinek69 Początkujący (450 p.)
ok no spoko, pomysle pozniej i jak cos to dam znac ;)
komentarz 24 marca 2019 przez Mateusz Pawlak Użytkownik (960 p.)
w tej drugiej pętli for musi byc wieksze bądź równe (>=). Małe niedopatrzenie

Podobne pytania

0 głosów
2 odpowiedzi 154 wizyt
pytanie zadane 4 października 2018 w C# przez DaroTL Nowicjusz (180 p.)
0 głosów
3 odpowiedzi 726 wizyt
pytanie zadane 3 października 2015 w C i C++ przez Ditrix Mądrala (5,650 p.)
0 głosów
1 odpowiedź 117 wizyt

92,626 zapytań

141,485 odpowiedzi

319,841 komentarzy

62,006 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!

...