Распечатать перестановки с условием - VB
Формулировка задачи:
Даны цифры 1 2 3 4 5 6. Требуется распечатать все
перестановки из этих цифр с условием, что
1) 1 стоит левее 2
2) 3 стоит левее 4
3) 5 стоит левее 6
Всего таких перестановок 90 штук.
Чтобы был понятно приведу пример попроще для
цифр 1 2 3 4 (условия те же)
1 2 3 4
1 3 2 4
1 3 4 2
3 1 2 4
3 1 4 2
3 4 1 2
(тут других вариантов нет)
решение
Ну очевидно, что на первом месте могут стоять цифры 1 3 5
а на последнем 2 4 6. А вот дальше видимо не обойтись без
прямой проверки всех цифр. Может есть код попроще?
Буду рад любой подсказке...
Решение задачи: «Распечатать перестановки с условием»
textual
Листинг программы
- Private prmArr() As Long
- Sub main()
- Dim n As Long, i As Long, k As Long
- n = 6
- ReDim prmArr(1 To n) As Long, a(1 To n) As Long
- For i = 1 To n
- prmArr(i) = i + i Mod 2 - 1
- Next i
- Do
- k = k + 1
- ReDim b(1 To n) As Long
- Debug.Print k,
- For i = 1 To n
- a(i) = prmArr(i) + b(prmArr(i))
- b(prmArr(i)) = b(prmArr(i)) + 1
- Debug.Print a(i);
- Next i
- Debug.Print
- Loop While MyNarayanaNextPerm(n)
- End Sub
- Function MyNarayanaNextPerm(n As Long) As Long
- Dim i As Long, k As Long, t As Long, tmp As Long
- For k = n - 1 To 1 Step -1
- If prmArr(k) < prmArr(k + 1) Then Exit For
- Next k
- If k Then
- t = n
- While t > k And prmArr(k) >= prmArr(t)
- t = t - 1
- Wend
- tmp = prmArr(k): prmArr(k) = prmArr(t): prmArr(t) = tmp
- t = n
- For i = k + 1 To (n + k) \ 2
- tmp = prmArr(i): prmArr(i) = prmArr(t): prmArr(t) = tmp
- t = t - 1
- Next i
- MyNarayanaNextPerm = i
- End If
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д