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

Zmiana sortowania, funkcja sort()

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
334 wizyt
pytanie zadane 11 stycznia 2022 w C i C++ przez HUBSON2912 Obywatel (1,480 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,340 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 (8,030 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,480 p.)
Raujesz mi skórę ziomek

Podobne pytania

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

93,182 zapytań

142,196 odpowiedzi

322,002 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2005p. - Łukasz Siedlecki
  7. 1964p. - CC PL
  8. 1785p. - Michal Drewniak
  9. 1744p. - rafalszastok
  10. 1724p. - Adrian Wieprzkowicz
  11. 1684p. - Mikbac
  12. 1624p. - Anonim 3619784
  13. 1520p. - Marcin Putra
  14. 1480p. - ssynowiec
  15. 1365p. - Dawid128
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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...