Загрузка данных


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]} раз(а)");
            }
        }
    }
}