Новичок
Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.12.2010
Репутация: нет Всего: нет
|
возникла новая проблема. не могуправильно сгенерировать без повторов. следовал этому алгоритму http://malover.ucoz.ru/sudoku/в п.4 сказано перемешать элементы чтоб не повторялись, как это сделать? вот фукция которая перемешивает | Код | public static void ShuffleList<T>(List<T> list) { Random rand = new Random(); for (int i = 0; i < list.Count; i++) { T tmp = list[i]; list.RemoveAt(i); list.Insert(rand.Next(0, list.Count), tmp); } }
|
а вот весь код с помощью которого пытаюсь всё реализовать | Код |
Random rand = new Random(); List<int> A = new List<int>() { 0, 0, 0 }; List<int> B = new List<int>() { 0, 0, 0 }; List<int> C = new List<int>() { 0, 0, 0 }; List<int> m = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int k = 0; int[,] mas = new int[9, 9]; int[] mas1 = new int[81]; int[] mas2 = new int[81]; ShuffleList(m);
for (int i = 0; i < 3; i++) { A[i] = m[k]; B[i] = m[k + 3]; C[i] = m[k + 6]; k++; }
for (int j = 0; j < 9; j++)//0 строка { mas[0, j] = m[j]; Console.Write(mas[0, j]);//выыод 0 строки } k = 0; for (int i = 0; i < 3; i++)//1 строка { mas[1, k] = C[i]; mas[1, k + 3] = A[i]; mas[1, k + 6] = B[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 1строки Console.Write(mas[1, j]);
k = 0; for (int i = 0; i < 3; i++)//2 строка { mas[2, k] = B[i]; mas[2, k + 3] = C[i]; mas[2, k + 6] = A[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 2строки Console.Write(mas[2, j]);
ShuffleList(A); ShuffleList(B); ShuffleList(C);
k = 0;
for (int i = 0; i < 3; i++)//3 строка { mas[3, k] = C[i]; mas[3, k + 3] = A[i]; mas[3, k + 6] = B[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 3строки Console.Write(mas[3, j]); k = 0; for (int i = 0; i < 3; i++)//4 строка { mas[4, k] = A[i]; mas[4, k + 3] = B[i]; mas[4, k + 6] = C[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 4строки Console.Write(mas[4, j]);
k = 0; for (int i = 0; i < 3; i++)//5 строка { mas[5, k] = B[i]; mas[5, k + 3] = C[i]; mas[5, k + 6] = A[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 5строки Console.Write(mas[5, j]);
ShuffleList(A); ShuffleList(B); ShuffleList(C); k = 0;
for (int i = 0; i < 3; i++)//6 строка { mas[6, k] = C[i]; mas[6, k + 3] = A[i]; mas[6, k + 6] = B[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 6строки Console.Write(mas[6, j]); k = 0; for (int i = 0; i < 3; i++)//7 строка { mas[7, k] = A[i]; mas[7, k + 3] = B[i]; mas[7, k + 6] = C[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 7строки Console.Write(mas[7, j]);
k = 0; for (int i = 0; i < 3; i++)//8 строка { mas[8, k] = B[i]; mas[8, k + 3] = C[i]; mas[8, k + 6] = A[i]; k++; } Console.WriteLine();
for (int j = 0; j < 9; j++)//вывод 8строки Console.Write(mas[8, j]); int n = 0; for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) { mas1[n] = mas[i, j]; mas2[n] = mas[i, j]; n++; } n = 0; foreach (Control c in this.Controls) { if (c is TextBox) { ((TextBox)c).Text = mas1[n].ToString(); n++; } }
|
и как можно сделать, чтобы из массива удальть элемент, к примеру под индексом i, а за место элемента оставить пустату.
|