Определить, сколько значений элементов в массиве встречается более одного раза - 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 для подсчета количества вхождений каждого значения в массиве. Вот список действий:
- Создается массив и хеш-таблица.
- В цикле заполняется хеш-таблица. Ключ - это элемент массива, значение - количество его вхождений плюс единица.
- В цикле перебираются все элементы хеш-таблицы и выводится количество вхождений каждого элемента.
- Выводится общее количество значений, которые встречаются более одного раза.
- Все элементы хеш-таблицы удаляются.
- Возвращается ноль.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д