Получить все числа, которые входят в последовательность по одному разу - C (СИ)

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

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

ввести с клавиатуры целое число n , целые числа a0,,,,,,,,an-1 (в последовательности могут быть повторяющиеся символы).Получить все числа, которые входят в последовательность по одному разу.

Решение задачи: «Получить все числа, которые входят в последовательность по одному разу»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <glib.h>
  3.  
  4. int keycmp(const void * a, const void * b) {
  5.     return GPOINTER_TO_INT(a) - GPOINTER_TO_INT(b);
  6. }
  7.  
  8. gboolean print_unique(gpointer key, gpointer value, gpointer data) {
  9.     if ( GPOINTER_TO_INT(value) == 1 ) {
  10.         printf("%d\n", GPOINTER_TO_INT(key));
  11.         *(int*)data += 1;
  12.     }
  13.    
  14.     return FALSE;
  15. }
  16.  
  17. int main(void) {
  18.     int n, v;
  19.    
  20.     while ( printf("Elements in sequence: ") && scanf("%d", &n) == 1 && n > 0 ) {
  21.         GTree * tree = g_tree_new(keycmp);
  22.        
  23.         for ( ; n && scanf("%d", &v) == 1; --n )
  24.             g_tree_insert(tree, GINT_TO_POINTER(v), GINT_TO_POINTER(GPOINTER_TO_INT(g_tree_lookup(tree, GINT_TO_POINTER(v)) + 1)));
  25.        
  26.         if ( n ) {
  27.             fprintf(stderr, "Input error!\n");
  28.             return 1;
  29.         }
  30.        
  31.         printf("----------------------------------------\n");
  32.         g_tree_foreach(tree, print_unique, &n);
  33.         printf("%d unique value(s).\n", n);
  34.        
  35.         g_tree_destroy(tree);
  36.     }
  37.    
  38.     return 0;
  39. }

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

  1. Включаются необходимые заголовочные файлы: stdio.h и glib.h.
  2. Определяется функция keycmp, которая будет использоваться для сравнения элементов в контейнере GTree по ключу. Эта функция возвращает разницу между двумя значениями, приведенными к типу int.
  3. Определяется функция print_unique, которая будет использоваться в качестве обработчика при проходе по GTree с помощью g_tree_foreach. Эта функция проверяет значение, связанное с ключом в контейнере, и если оно равно 1, выводит ключ и увеличивает счетчик уникальных значений на 1.
  4. В функции main считывается количество элементов в последовательности и создается GTree с функцией сравнения keycmp.
  5. В цикле считываются элементы последовательности и добавляются в GTree с помощью g_tree_insert. Если после цикла остаются элементы, выводится сообщение об ошибке и возвращается 1.
  6. Выводится разделительная строка и с помощью g_tree_foreach проходят по всем элементам GTree, вызывая функцию print_unique и передавая ей в качестве данных переменную n, которая будет изменяться в функции для отслеживания количества уникальных значений.
  7. Выводится количество уникальных значений и выводится сообщение об успешном завершении программы.
  8. Все выделенные памятью объекты уничтожаются с помощью g_tree_destroy.

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


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

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

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы