Гистограмма повторяющихся элементов массива

Дан массив из ? чисел ?0, ?1, . . ., ??−1. Постройте гистограмму значений элементов массива: для каждого значения подсчитайте сколько раз оно встречается в массиве. В первой строке записано целое число ? (1 <= ? <= 10^5). Во второй строке через пробел записано ? целых чисел ?? (1 <= ?? <= 10^4). Для каждого значения, которое встречается в массиве хотя бы раз, выведите сколько раз оно присутствует среди элементов массива в формате: “значение: количество”. Значения требуется выводить в порядке возрастания. Для вывода двух целых чисел, разделённых двоеточием с пробелом, удобно использовать функцию printf со следующей форматной строкой: printf ("%d: %d", value , count ); Программу делаю несколько дней; на выходе все элементы повторяются:

#include<stdio.h>
int main(){
    int N, kol;
    kol=1;
    int a[100000];
    scanf("%d\n", &N);
    for(int i=0; i<N; i++){
        scanf("%d", &a[i]);
    }
    for(int i=1; i<N; i++){
        if (a[i]==a[i-1]){
            kol++;
        }
    printf("%d: %d\n", a[i], kol);
    }
    return 0;
}

Подскажите, что тут можно сделать/подправить, умоляю


Ответы (1 шт):

Автор решения: Harry

Попробуйте так:

#include<stdio.h>

int main()
{
    int N;
    int a[10001] = {0};
    scanf("%d\n", &N);
    for(int i=0, x; i<N; i++)
    {
        scanf("%d", &x);
        a[x]++;
    }
    for(int i=0; i < 10001; i++)
        if (a[i])  printf("%d: %d\n", i, a[i]);
}
→ Ссылка