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

Zmiana sortowania, funkcja sort()

Object Storage Arubacloud
0 głosów
195 wizyt
pytanie zadane 11 stycznia 2022 w C i C++ przez HUBSON2912 Obywatel (1,340 p.)

Witam,

mam do zrobienia zadanie, gdzie muszę ciąg liczb posortować według NWD z 1260. Dziś miałem na lekcji, że należy napisać funkcję (nauczyciel nie wyjaśnił jednak zbyt szczegółowo tego).

Mam taką:

bool zmiensort(int a, int b)
{
    if(__gcd(a,1260)>__gcd(b,1260))
        return a>b;
    if(__gcd(a,1260)<__gcd(b,1260))
        return a<b;
    if(__gcd(a,1260)==__gcd(b,1260))
        return a<b;
}

 Jednak nie działa. Wyjaśniłby ktoś jak należy poprawnie pisać takie funkcje? Dziękuję, doceniam.
Szczegóły zadania: https://www.spoj.com/WSDOCPP/problems/DDZ6/

komentarz 11 stycznia 2022 przez Oscar Nałogowiec (29,320 p.)
Funkcja, którą masz napisać, to funkcja ustalająca kolejność elementów. Służy do porównania dwóch elementów i dać wynik 1, lub -1 zależnie który argumet jest "większy", lub 0 gdy są "równe". Oczywiście większe i równe dotyczy twojego kryterium, a nie ich wartości matematycznej.

Funkcja które zaprezentowałeś jest dobra, tylko wyniki (to za return) złe. Po zbadaniu takich warunków jakie podałeś masz już gotowy wynik -  1,0 albo -1.

1 odpowiedź

+2 głosów
odpowiedź 11 stycznia 2022 przez toko Dyskutant (7,670 p.)
wybrane 11 stycznia 2022 przez HUBSON2912
 
Najlepsza

Masz zrobić funkcję, którą potem podasz sort()'owi? To chyba powinno byc tak:

bool zmiensort(int a, int b) {
    int ga = __gcd(a, 1260); // zapamiętujemy, żeby nie liczyć kilka razy
    int gb = __gcd(b, 1260);
    if(ga==gb) // jeśli są równe, to zwracamy czy a jest mniejsze od b, żeby posortować normalnie
       return a<b;
    return ga>gb; // w przeciwnym wypadku zwracamy czy ga jest większe od gb, żeby posortować niewzrastająco po NWD
    /* lub:
    if(ga>gb)
        return true;
    if(ga<gb)
        return false;
    if(ga==gb)
        return a<b; // if(a<b) return true; else return false;
    */
}

Zasada zwracania jest taka, że jak a powinno być przed b, zwracamy true, w przeciwnym wypadku false.

komentarz 11 stycznia 2022 przez HUBSON2912 Obywatel (1,340 p.)
Raujesz mi skórę ziomek

Podobne pytania

0 głosów
3 odpowiedzi 533 wizyt
pytanie zadane 30 czerwca 2022 w C i C++ przez diedassel Użytkownik (570 p.)
0 głosów
1 odpowiedź 584 wizyt
pytanie zadane 7 marca 2020 w C i C++ przez TheFandorn Nowicjusz (140 p.)
0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 2 sierpnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

92,655 zapytań

141,545 odpowiedzi

319,983 komentarzy

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

...