yaklit, хорош флудить во всех темах подряд.
Есть что добавить по теме -- добавляй. Нечего добавить -- удержись.
Генерируешь число, меняешь то что в первом элементе и в элементе со сгенерированным номером. Повторяешь для второго и всех остальных элементов. Итоговый массив просто тупо читаешь подряд. Он уже неплохо перемешан. Зависит от того где какой степени случайности ты ожидаешь и насколько это критично.
А так - если от 1 до 9 и задача не висит где-то в офигенно длинном цикле, то я бы кидал кубик и смотрел выпадало ли раньше то что выпало сейчас. Потому что неэффективно, но легко читаемо и не особо перегрузит при таком малом количестве вариантов.
Private ArrayCipher(9, 9) As Long
Private Sub MakeArray()
Dim Index As Long
Dim i As Long
Dim j As Long
Dim Z As Long
Randomize
For i = 1 To 9
For j = 1 To 9
If j = 1 Then
ArrayCipher(i, j) = Int(9 * Rnd) + 1
Else
ArrayCipher(i, j) = Int(9 * Rnd) + 1
For Z = j - 1 To 1 Step -1
If ArrayCipher(i, j) = ArrayCipher(i, Z) Then
j = j - 1
Exit For
End If
Next Z
End If
Next j
If i > 1 Then
For Index = (i - 1) To 1 Step -1
For Z = 1 To 9
If ArrayCipher(i, Z) = ArrayCipher(Index, Z) Then
i = i - 1
GoTo Foo
End If
Next Z
Next Index
End If
Foo:
Next i
End Sub
ОФФ: Позвольте, а не для Судоку ли вы это творите?
Может, кто-то еще найдет такие операции.
Но в общем, пока получается, что нужно сгенерировать три перестановки и решение на транспонирование (булево).
3) менять все значения равные А на Б и наоборот - "т.е. менять местами числа"
Любое изменение места числа приводит к ловинному изменению во всем массиве - а это уже закономерность, которую можно разгадать. Я этого не хочу. Я хочу сделать полную и тотальную случайность.
генерить гигантскую систему линейных уравнений и решать методом Гаусса
Мы генерим еще одну перестановку Y(X) и все X в массиве заменяем на Y(X).
И про транспонирование не забывайте.
Сейчас этот форум просматривают: AhrefsBot и гости: 34