2015-08-26 2 views
3

я должен вернуться, какая цифра в ряде происходит наиболее часто (хотя и не сколько раз это происходит)Return, какая цифра происходит наибольшее количество раз

До сих пор я могу только получить это, я не знаю, как для выделения цифры, чтобы показать, сколько раз происходит каждая цифра.

#include <stdio.h> 

int frequentDigit(int); 

int main() 
{ 
    frequentDigit(123032333); 
    return 0; 
} 

int frequentDigit(int arg) 
{ 
    int tmp; int i; int myArr[9] = { 0 }; 
    tmp = (arg < 0) ? -arg : arg; 
    do 
    { 
     myArr[tmp % 10]++; 
     tmp /= 10; 
    } while (tmp != 0); 
    for (i = 0; i < 9; i++) { printf("\nThere are %d occurances of digit %d", myArr[i], i); } 
} 
+3

'myArr []' должен содержать элементы '10'. И вам не нужно выделять цифры, просто пройдите через 'myArr []' один раз, чтобы проверить, какой из них является 'max' – Haris

+1

... и for-loop должен перебираться из 0 ... 9, а не 0. .. 8, т.е. увеличивать потолок 'i' на единицу. – Downvoter

+1

Что он должен вернуть с помощью уникальных решений? –

ответ

0

Его простота. В конце коды у вас есть массив частот, если вы найдете максимум того, что вы получите наиболее распространенный элемент

Просто используйте цикл, чтобы найти максимальные и печать, что:

int max = myArr[0];  // start with max = first element 
int max_position=0; 
for(int i = 1; i<9; i++) 
{ 
     if(myArr[i] > max){ 
      max = myArr[i]; 
      max_position=i; 
     } 
} 
    printf("\The max is %d occuring %d times ", max_position, max_position) 
+1

Зачем вам нужен цикл? –

+0

Значение числа не имеет значения, мы просто пытаемся использовать число, которое встречается наиболее часто. Он не должен быть наибольшим числом –

+1

Код должен быть 'max = array [i];' и, как говорит OP, он не отвечает на вопрос. –

1

массив, в котором вы храните частоту цифр, то есть myArr[]. Предположим, что он удерживает частоту всего числа от 0...9. А поскольку есть номера 10, вам понадобится массив длины 10.

int myArr[10]; 

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

Чтобы пройти, цикл for должен идти до 9

for (i = 0; i <= 9; i++) 

Отредактировано

Как кто-то заметил, вы можете найти значение max в то время как вы вычисления самой частоты.

int max = -1, max_num = -1; 
do 
{ 
    myArr[tmp % 10]++; 
    if(myArr[tmp % 10] > max) 
    { 
     max = myArr[tmp % 10]; 
     max_num = tmp % 10; 
    } 
    tmp /= 10; 
} while (tmp != 0); 
printf("%d", max_num); 
+1

Зачем вам нужен цикл? –

Смежные вопросы