2013-12-07 4 views
1

Итак, я пытаюсь подсчитать количество вхождений каждой цифры в массиве.Подсчитайте количество вхождений цифры в строке

Мой код, который я получил до сих пор выглядит следующим образом:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int numbers [10]= {1, 4, 5, 5, 5, 6, 6, 3, 2, 1}; 
    int count = 0; 

    for(int i = 0; i < 10; i++) 
    { 
    for (int j = 0; j < 10; j++) 
    { 
     if (numbers[i] == numbers[j]) 
     { 
     count++; 
     } 
    } 
    printf("Number %d has occured %d many times \n", numbers[i], count); 
    count = 0; 

    } 
} 

Только выход я получаю следующее:

Number: 1  Occurence: 2 
Number: 4  Occurence: 1 
Number: 5  Occurence: 3 
Number: 5  Occurence: 3 
Number: 5  Occurence: 3 
Number: 6  Occurence: 2 
Number: 6  Occurence: 2 
Number: 3  Occurence: 1 
Number: 2  Occurence: 1 
Number: 1  Occurence: 2 

Я только хочу, чтобы подсчитать появление каждой цифры , это, кажется, подсчет дубликатов.

Как исправить этот код? Может кто-то указать мне в правильном направлении.

Большое спасибо

Алонсо

+0

На каком языке это? C? C++? Что-то другое? –

+0

Пожалуйста, отметьте соответствующий язык в своем вопросе. Я пришел сюда, ожидая Java, и был грустно разочарован. –

+0

Учитывая синтаксис include, я бы предположил «C» –

ответ

0

Вы будете нуждаться в массивы - один для подсчета (результат) и один для входа. Вы должны увеличивать индекс в массиве count, когда вы перебираете числа ввода. Я не мог удержаться на самом деле писать код так, здесь вы идете, должно работать В C++

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int inputNumbers [] = {1, 4, 5, 5, 5, 6, 6, 3, 2, 1}; 
    int resultCount [] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 
    int countNumbers = sizeof(inputNumbers)/sizeof(inputNumbers[0]); 

    for(int i = 0; i < countNumbers; i++) 
    { 
    resultCount[inputNumbers[i]]++; 
    } 

    for(int i = 0; i < countNumbers; i++) 
    { 
    printf("Number %d has occured %d times \n", i, resultCount[i]); 
    } 
} 

Надежда, что помогает.

1

Рассмотрим этот модифицированный код:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int numbers [10]= {1, 4, 5, 5, 5, 6, 6, 3, 2, 1}; 
    int count = 0; 

    for(int i = 0; i < 10; i++) { //i = current digit 
    for (int j = 0; j < 10; j++) { //j = index in array 
     if (i == numbers[j]) { 
     count++; 
     } 
    } 
    printf("Number %d has occured %d times \n", i, count); 
    count = 0; 
    } 
} 

Выход:

Number 0 has occured 0 times 
Number 1 has occured 2 times 
Number 2 has occured 1 times 
Number 3 has occured 1 times 
Number 4 has occured 1 times 
Number 5 has occured 3 times 
Number 6 has occured 2 times 
Number 7 has occured 0 times 
Number 8 has occured 0 times 
Number 9 has occured 0 times 

Вы рассчитывали, как часто встречающаяся каждая цифра в массиве (в том числе повторяющихся цифр в массиве) произошло.

+0

Спасибо. Я видел, где я ошибся. Я знал, что это была бы простая ошибка. Cheers – AlonsoM

+0

Нет проблем! Пожалуйста, подумайте о том, чтобы отметить ответ «правильно», чтобы другие могли найти правильное решение, если у них есть аналогичная проблема! Замечание: если вы хотите игнорировать цифры с нулевым числом, заключите printf() в if (count == 0) {} –

+0

Рассмотрите 'int count = 0;' между 2 'for (...)'. – chux

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