• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Заполнение двумерного массива с неповторяющимися элементами строка-столбец

xenon97

Green Team
03.01.2018
59
18
BIT
29
Здравствуйте, прошу помощи, так как не силён в программировании. Сама задача : необходимо заполнить двумерный массив числами из списка.
Например нам дан список элементов:
C#:
List<int> numbers = new List<int>() {0, 1, 2, 3, 4, 5};
Необходимо заполнить двумерный массив числами из этого списка так, чтобы не было повторяющихся элементов в строке и столбце
1619784565418.png

Моя задумка:
C#:
            int[,] nums = new int[n,n];
            for (i = 0; i < n; i++)
            {
                for (int p = numbers.Count - 1; p >= 1; p--)
                {
                    int k = r.Next(p + 1);
                    // обменять значения numbers[j] и numbers[i]
                    var temp = numbers[k];
                    numbers[k] = numbers[p];
                    numbers[p] = temp;
                }
                for (j = 0; j < n; j++)
                {
                    nums[i, j] = numbers[j];
                    Console.Write("{0,3}", nums[i, j]);
                }
                Console.WriteLine();
            }
В этом куске кода я применяю перестановку к списку и заполняю строки этой перестановкой, но вот проблема, числа в столбцах иногда повторяются. Подскажите как можно от этого избавиться.
P.S. У меня есть предположение как уйти от этого, но я не знаю как написать код.
Сам план:
1) Заполняем строки массива перетасованным списком
2) Столбец массива преобразуем в список и ищем повторы:
а) если повтор найден, то найти индекс строки и поменять местами с элементом, которого нет в списке
 

userCut

Member
13.05.2021
23
0
BIT
0
Если в numbers нет повторений, то достаточно просто смещать список вправо на i и добавлять это в соответствующую строку массива.
например есть массив [1 2 3] и вам нужно его перетасовать.
На первой итерации добавляете в первую строчку[1 2 3], на след шаге i = 1, соответственно смещаете на 1 и получаете [3 1 2], добавляете во вторую строчку и тд.
на выходе получаете.
1 2 3
3 1 2
2 3 1
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!