Заполнение массива, с условием - C#

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

Всем привет! Подскажите горе программисту одну штуку: Нужно заполнить одномерный массив на 11 ячеек, выбранным пользователем (от 1 до 6) количеством элементов, на рандомные позиция. Единственное условие между каждым из элементов должна быть минимум 1 пустая ячейка. Расставить 1, 2 и 6 не составляет проблем. Но вот как одним алгоритмом, при необходимости, расставлять 3, 4 и 5 не знаю. Пока сделал костыльный while() который повторяет расстановку до тех пор пока все не станет как нужно, но работает это ужасно.

Код к задаче: «Заполнение массива, с условием - C#»

textual
using System;
 
class Program
{
    public static void Main()
    {
        Random rnd = new Random();
        while (true)
        {
            Console.WriteLine("Введите число от 1 до 6");
            string s = Console.ReadLine();
            if (s == null) break;
            int n;
            if (!Int32.TryParse(s, out n) || n < 1 || n > 6) break;
            int[] spaces = new int[n + 1];
            for (int i = 1; i < spaces.Length - 1; ++i)
            {
                spaces[i] = 1;
            }
            for (int i = 12 - n * 2; i != 0; --i)
            {
                spaces[rnd.Next(spaces.Length)]++;
            }
            for (int i = 0; i < spaces.Length; ++i)
            {
                if (i != 0) Console.Write("1 ");
                while (spaces[i]-- != 0) Console.Write("0 ");
            }
            Console.WriteLine();
        }
    }
}

10   голосов, оценка 4.100 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы