Ниче не приходит в голову, не могу придумать код - 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем структуру CountNumber, которая содержит два поля: number (число) и count (количество)
- Определяем переменную N типа enum, которая равна 20
- Создаем массив m типа int размером N и инициализируем его случайными числами от 0 до 19 с помощью функции rand()
- Инициализируем генератор случайных чисел с помощью функции srand(time(0))
- Создаем указатель на структуру CountNumber и выделяем память под массив CountNumber размером N с помощью функции malloc()
- Инициализируем переменную cn_size, которая отслеживает количество заполненных элементов в массиве cn
- Заполняем массив cn, проверяя наличие числа в массиве m. Если число найдено, увеличиваем его счетчик на 1. Если число не найдено, добавляем его в массив cn и устанавливаем счетчик на 1.
- Создаем массив result и инициализируем переменную res_size, которая отслеживает количество заполненных элементов в массиве result
- Заполняем массив result, проверяя наличие числа в массиве m и его счетчика в массиве cn. Если число найдено и его счетчик меньше или равен 2, добавляем его в массив result и увеличиваем res_size на 1.
- Выводим массив result на экран с помощью функции printf()
- Возвращаем EXIT_SUCCESS в качестве результата работы программы