Как распечатать первое вхождение, если существует более 1 максимального значения? - PullRequest
0 голосов
/ 25 сентября 2019

Поэтому мне нужно написать некоторый код, который читает из файла и выводит определенные его части.

Для одной его части я должен прочитать некоторые значения и распечатать то, что встречается чаще всего.

Моя проблема заключается в том, что если существует более 1 значения, которые встречаются максимальное количество раз (например, 5 и 4 встречаются 2 раза), мой код печатает последнее значение.

Iхотите напечатать первый (в этом примере это будет 5).Как мне это сделать?

Вот мой код;

    int find_max(int id[], char poi_names[][51], int num){
     int max_index = 0;
     int max_freq = 1;
     for(int i = 0; i < num -1; i++){
         int freq = 1;
         for(int j = 0; j < num; j++){
             if(id[i] == id[j]){
                 freq ++;
             }
         }
         if(max_freq<freq){
             max_index = i;
             max_freq = freq;
         }
     }
     return max_index;
 }

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Вместо проверки (max_freq lessthan freq) разрешите ему также заменить идентификатор, когда (max_freq == freq) ... Это позволит новым значениям с той же частотой заменить предыдущий максимум.

if(max_freq<=freq){
     max_index = i;
     max_freq = freq;
}
0 голосов
/ 25 сентября 2019

Вставьте другое условие, если частота совпадает с максимальной частотой, и в этом условии проверьте, меньше ли max_index, чем индекс, если меньше, чем print.


else if (max_freq == freq){
    if(max_index > index)
        max_index = index
}

Я думаю, что это должно дать первое вхождение.

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