Загрузка данных
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
Console.WriteLine("=== Поиск отсутствующих чисел (рандомный массив 0-20) ===\n");
// Создаем генератор случайных чисел
Random random = new Random();
// Рандомно задаем размер массива (от 1 до 20, чтобы было интереснее)
int size = random.Next(1, 21); // от 1 до 20 включительно
Console.WriteLine($"Рандомно выбран размер массива: {size}");
// Создаем массив и заполняем его случайными числами от 0 до 20
int[] numbers = new int[size];
Console.WriteLine("\nСгенерированный массив:");
for (int i = 0; i < size; i++)
{
numbers[i] = random.Next(0, 21); // от 0 до 20 включительно
Console.Write(numbers[i] + " ");
}
// Находим отсутствующие числа (от 0 до 20)
bool[] found = new bool[21]; // Массив для отметки встреченных чисел (0-20)
for (int i = 0; i < size; i++)
{
// Проверка на случай, если вдруг число вышло за пределы (защита)
if (numbers[i] >= 0 && numbers[i] <= 20)
{
found[numbers[i]] = true; // Отмечаем числа, которые есть в массиве
}
}
// Собираем отсутствующие числа
List<int> missingNumbers = new List<int>();
for (int i = 0; i <= 20; i++)
{
if (!found[i])
{
missingNumbers.Add(i);
}
}
// Вывод результатов
Console.WriteLine("\n\n" + new string('=', 50));
Console.WriteLine("\nРЕЗУЛЬТАТЫ:\n");
// Минимальное и максимальное число в массиве
int min = numbers[0];
int max = numbers[0];
for (int i = 1; i < size; i++)
{
if (numbers[i] < min) min = numbers[i];
if (numbers[i] > max) max = numbers[i];
}
Console.WriteLine($"Размер массива: {size}");
Console.WriteLine($"Диапазон чисел в массиве: от {min} до {max}");
// Считаем уникальные числа
HashSet<int> uniqueNumbers = new HashSet<int>(numbers);
Console.WriteLine($"Уникальных чисел в массиве: {uniqueNumbers.Count}");
Console.WriteLine("\n" + new string('-', 50));
if (missingNumbers.Count > 0)
{
Console.WriteLine($"\nЧисла от 0 до 20, которые НЕ встречаются в массиве (всего {missingNumbers.Count} шт.):");
// Группируем отсутствующие числа для компактного вывода
List<string> ranges = new List<string>();
int start = missingNumbers[0];
int end = missingNumbers[0];
for (int i = 1; i < missingNumbers.Count; i++)
{
if (missingNumbers[i] == end + 1)
{
end = missingNumbers[i];
}
else
{
ranges.Add(start == end ? $"{start}" : $"{start}-{end}");
start = missingNumbers[i];
end = missingNumbers[i];
}
}
ranges.Add(start == end ? $"{start}" : $"{start}-{end}");
Console.WriteLine(string.Join(", ", ranges));
Console.WriteLine($"\nПодробно: {string.Join(", ", missingNumbers)}");
}
else
{
Console.WriteLine("\n✓ В массиве встретились все числа от 0 до 20!");
}
// Дополнительная статистика
Console.WriteLine("\n" + new string('=', 50));
Console.WriteLine("\nДОПОЛНИТЕЛЬНАЯ СТАТИСТИКА:\n");
// Частота встречаемости чисел
int[] frequency = new int[21];
for (int i = 0; i < size; i++)
{
if (numbers[i] >= 0 && numbers[i] <= 20)
{
frequency[numbers[i]]++;
}
}
Console.WriteLine("Частота встречаемости чисел от 0 до 20:");
for (int i = 0; i <= 20; i++)
{
if (frequency[i] > 0)
{
Console.WriteLine($" {i}: {frequency[i]} раз(а)");
}
}
}
}