С помощью C Выведите все наиболее часто встречающиеся элементы в списке

#c

Вопрос:

Ввод образца: 3 4 6 3 3

Ожидаемый результат:

3

3

3

(печать всех наиболее часто встречающихся номеров)

Мой код:

 #includelt;stdio.hgt; #includelt;stdlib.hgt; //Program to count most occuring element int findMostFrequentElement(int A[], int n) {  for (int i = 0; i lt; n; i  ) //Sort the array  {   int temp;  for (int j = i 1; j lt; n; j  )   {   if(A[i] gt; A[j])   {   temp = A[i];   A[i] = A[j];   A[j] = temp;   }   }   }   //finnd the most occuring element  int max_count = 1, res = A[0], count = 1;   for (int i = 1; i lt; n; i  ) {   if (A[i] ==A[i - 1])   count  ;   else {   if (count gt; max_count) {   max_count = count;   res = A[i - 1];   }   count = 1;   }   }   // If last element is most frequent   if (count gt; max_count)   {   max_count = count;   res = A[n - 1];   }   return res; //return the most repeatinng element } //Driver Program int main(int argc, char* argv[]) {  int n; //Array Size Declaration  printf("Enter the number of elements ");  n = atoi(argv[1]);  int array[n]; //Array Declaration  printf("Enter the array elements");  for(int i=0;ilt;n;i  ) //Initializing Array Elements  {  array[i] = atoi(argv[2]);  }   int maxElement = findMostFrequentElement(array, n); //Function call  printf("n Maximum Repeating Element : %d",maxElement); //Prints the most occuring element   return 0; }  

Есть идеи, как это исправить? Мой счетчик печатает не все наиболее часто встречающиеся числа, а вместо этого просто печатает наиболее часто встречающиеся числа. Я пытаюсь сделать это с помощью аргументов, а не сканирования

Комментарии:

1. Что array[i] = atoi(argv[2]); прикажете делать? Разве так не должно быть atoi(argv[i]); ? И » за » должно быть for (int i = 2; i lt; n 2; i ) . Вероятно, существует множество других подобных проблем. Вам нужно это отладить.

2. Чтобы напечатать более одного значения, вам понадобится второй цикл.

3. если вы не хотите использовать scanf , вам нужно использовать args, но вы не можете добавлять текст, как это делает scanf, если вы действительно хотите добавить текст, подобный scanf, вам нужно использовать getchar, это заставляет вашу программу ждать ввода. И вы должны сказать нам, что не работает, есть ли у вас ошибки во время компиляции ?

4. Каков ожидаемый результат при вводе 3 4 6 3 3 4 4 данных ?

Ответ №1:

Прежде всего, если вы хотите получать входные данные с помощью аргументов, вам следует исправить свою main функцию, потому что, если вы хотите сохранить количество элементов массива в массиве, вы также должны игнорировать первый элемент массива в своей функции findMostFrequentElement . Если нет, то сохраните его, n а затем получите элементы! Ваша главная проблема в том, что вы не получаете входные данные для элементов массива, а в адресе элементов есть некоторые значения, которые вы не изменили! atoi не работает, как scanf . Его следует использовать после того, как вы получите входные данные для типизации.

Во-вторых, после того, как вы найдете наиболее частое число, вам следует подсчитать, сколько раз оно возникало, чтобы вы могли напечатать наиболее частое число, которое вы использовали много раз for или while которое вы делали. Итак, чтобы исправить это, вам следует использовать что-то вроде: for (int j=0;jlt;max_count;j ) printf("%dn",res); но если в качестве выходных данных может быть несколько разных чисел, я предлагаю вам добавить еще for одно в конце вашей функции, чтобы, если есть другие часто встречающиеся числа, вы могли их найти и распечатать.