Как отсортировать структуру на основе 2 полей в C? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть структура, используемая в игре Hangman, где пользователь получает очки в зависимости от количества неверных попыток.

Мой вопрос заключается в том, как их ранжировать, принимая во внимание как очки (понты), так иколичество игр (n_jogos).

Так, например:

  • Пользователь, имеющий 10 очков и сыгравший только один раз, должен предстать перед пользователем, имеющим 15 очков, который сыграл в 2 игры.

До сих пор я пытался:

  • реализовать qsort (), но так как я не совсем понимаю, я не смогзаставить его работать.

  • реализует пузырьковую сортировку, которая работает при сортировке по количеству игр, но не при сортировке по количеству игр и баллам.

Любая помощь будет очень признательна, спасибо.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Пользователь, набравший 10 очков и сыгравший только один раз, должен прийти раньше, чем пользователь, набравший 15 очков, сыгравший в 2 играх.

Так ли это, что вы хотитеранжировать сначала по количеству игр, а затем по очкам?Я предполагаю, что да, но если нет, то вы должны решить, каковы критерии заказа.Вот функция, которую вы можете передать qsort (3).Сезон по вкусу.

typedef struct {
    char nome[50], password[50];
    int pontos, n_jogos;
} Utilizador;

int cmp ( const void *A, const void *B ) {
    const Utilizador *a=A, *b=B;

    if( a->jogos == b->jogos) {
        if( a->pontos == b-pontos ) return 0;
        return a->pontos < b-pontos? -1 : 1;
    }
    return  a->jogos < b->jogos? -1 : 1;
}
0 голосов
/ 21 декабря 2018

Вы можете просто создать ранг:

double userRank = (double)pontos / (double)n_jogos;

Затем просто откорректируйте систему ранжирования, взвесив эти две переменные с множителями.

Сортировка по рангу пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...