Гистограмма повторяющихся элементов массива
Дан массив из ? чисел ?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 шт):
Попробуйте так:
#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]);
}