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