Вы пытаетесь подсчитать вхождения до того, как все единицы будут приняты, что невозможно, если вы не ведете отдельный счетчик для каждого значения, что, в свою очередь, нецелесообразно, если нет ограничений на диапазон входных значений или диапазонбольшой.
Вам необходимо получить все значения, прежде чем вы сможете сообщить о любых подсчетах. Затем для каждого значения в массиве проверьте, не произошло ли это значение раньше, и, если нет, выполните итерацию всего массива для подсчета вхождений:
#include <stdio.h>
#include <stdbool.h>
int main()
{
// Get number of values
int num = 0 ;
scanf("%d", &num);
// Get all values
int array[25];
for( int i = 0; i < num; i++)
{
scanf("%d", &array[i]);
}
// For each value in array...
for( int i = 0; i < num ; i++)
{
// Check value not already counted
bool counted = false ;
for( int j = 0; !counted && j < i; j++ )
{
counted = array[j] == array[i] ;
}
// If current value has not previously been counted...
if( !counted )
{
// Count occurnaces
int count = 0 ;
for( int j = 0; j < num; j++ )
{
if( array[j] == array[i] )
{
count++ ;
}
}
// Report
printf("%d:%d ", array[i], count);
}
}
return 0;
}
Для вашего примера ввода результат:
5
5 6 6 6 7
5:1 6:3 7:1
Можно объединить две внутренние петли, выполняя оценку counted
и count
:
// Count occurrences of current value,
bool counted = false ;
int count = 0 ;
for( int j = 0; !counted && j < num; j++ )
{
if( array[j] == array[i] )
{
count++;
// Discard count if value occurs earlier - already counted
counted = j < i ;
}
}
// If current value has not previously been counted...
if( !counted )
{
// Report
printf("%d:%d ", array[i], count);
}
}