Ниче не приходит в голову, не могу придумать код - C (СИ)

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

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

Задан целочисленный массив размера N. Удалить из массива все элементы встречающиеся более двух раз. На языке С

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

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
typedef struct CountNumber{
    int number;
    int count;
} CountNumber;
 
 
int main(void){
    enum { N = 20 };
    
    int m[N];
    
    srand(time(0));
    
    for (int i = 0; i < N; ++i){
        m[i] = rand() % 20;
        printf("%d ", m[i]);
    }
    printf("\n");
    
    CountNumber *cn = malloc(sizeof(CountNumber) * N);
    int cn_size = 0;
    
    for (int i = 0; i < N; ++i){
        int j = 0;
        for (; j < cn_size; ++j){
            if (m[i] == cn[j].number){
                ++cn[j].count;
                break;
            }
        }
        
        if (j == cn_size){
            cn[cn_size].number = m[i];
            cn[cn_size].count = 1;
            ++cn_size;
        }
    }
    
    int result[N];
    int res_size = 0;
    
    for (int i = 0; i < N; ++i){
        for (int j = 0; j < cn_size; ++j){
            if ((m[i] == cn[j].number) && (cn[j].count <= 2)){
                result[res_size++] = m[i];
                break;
            }
        }
    }
    
    for (int i = 0; i < res_size; ++i)  printf("%d ", result[i]);
    printf("\n");
    
    return EXIT_SUCCESS;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Объявляем структуру CountNumber, которая содержит два поля: number (число) и count (количество)
  3. Определяем переменную N типа enum, которая равна 20
  4. Создаем массив m типа int размером N и инициализируем его случайными числами от 0 до 19 с помощью функции rand()
  5. Инициализируем генератор случайных чисел с помощью функции srand(time(0))
  6. Создаем указатель на структуру CountNumber и выделяем память под массив CountNumber размером N с помощью функции malloc()
  7. Инициализируем переменную cn_size, которая отслеживает количество заполненных элементов в массиве cn
  8. Заполняем массив cn, проверяя наличие числа в массиве m. Если число найдено, увеличиваем его счетчик на 1. Если число не найдено, добавляем его в массив cn и устанавливаем счетчик на 1.
  9. Создаем массив result и инициализируем переменную res_size, которая отслеживает количество заполненных элементов в массиве result
  10. Заполняем массив result, проверяя наличие числа в массиве m и его счетчика в массиве cn. Если число найдено и его счетчик меньше или равен 2, добавляем его в массив result и увеличиваем res_size на 1.
  11. Выводим массив result на экран с помощью функции printf()
  12. Возвращаем EXIT_SUCCESS в качестве результата работы программы

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


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

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

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