Определить, сколько значений элементов в массиве встречается более одного раза - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан одномерный массив А, состоящий из N элементов. Сколько значений элементов в массиве А встречается более одного раза?

Решение задачи: «Определить, сколько значений элементов в массиве встречается более одного раза»

textual
Листинг программы
/* ANSI C 99 */
#include <stdio.h>
#include <glib.h>
 
#define MEETS_MORE_THAN (1)
 
int main(void) {
    int array[] = { 5, 9, 1, 0, 5, 5, 8, 1, 0, 0, 5, 7, 9 };
    GHashTable * map = g_hash_table_new(g_int_hash, g_int_equal);
    
    for ( int i = 0; i < G_N_ELEMENTS(array); ++i )
        g_hash_table_insert(map, array + i, GINT_TO_POINTER(GPOINTER_TO_INT(g_hash_table_lookup(map, array+i)) + 1));
    
    int count = 0;
    GHashTableIter iter;
    gpointer key, value;
    
    g_hash_table_iter_init(&iter, map);
    printf("Value\tMeets\n");
    while ( g_hash_table_iter_next(&iter, &key, &value) ) {
        printf("%d\t%d\n", *(int*)key, GPOINTER_TO_INT(value));
        if ( GPOINTER_TO_INT(value) > MEETS_MORE_THAN )
            ++count;
    }
    printf("%d values meets more than %d time(s).\n", count, MEETS_MORE_THAN);
    
    g_hash_table_remove_all(map);
    return 0;
}

Объяснение кода листинга программы

В этом коде используется g_hash_table для подсчета количества вхождений каждого значения в массиве. Вот список действий:

  1. Создается массив и хеш-таблица.
  2. В цикле заполняется хеш-таблица. Ключ - это элемент массива, значение - количество его вхождений плюс единица.
  3. В цикле перебираются все элементы хеш-таблицы и выводится количество вхождений каждого элемента.
  4. Выводится общее количество значений, которые встречаются более одного раза.
  5. Все элементы хеш-таблицы удаляются.
  6. Возвращается ноль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы