Распечатать перестановки с условием - 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
Листинг программы
  1. Private prmArr() As Long
  2.  
  3. Sub main()
  4.     Dim n As Long, i As Long, k As Long
  5.     n = 6
  6.     ReDim prmArr(1 To n) As Long, a(1 To n) As Long
  7.     For i = 1 To n
  8.         prmArr(i) = i + i Mod 2 - 1
  9.     Next i
  10.  
  11.     Do
  12.         k = k + 1
  13.         ReDim b(1 To n) As Long
  14.         Debug.Print k,
  15.         For i = 1 To n
  16.             a(i) = prmArr(i) + b(prmArr(i))
  17.             b(prmArr(i)) = b(prmArr(i)) + 1
  18.             Debug.Print a(i);
  19.         Next i
  20.         Debug.Print
  21.     Loop While MyNarayanaNextPerm(n)
  22.  
  23. End Sub
  24.  
  25. Function MyNarayanaNextPerm(n As Long) As Long
  26.     Dim i As Long, k As Long, t As Long, tmp As Long
  27.    
  28.     For k = n - 1 To 1 Step -1
  29.         If prmArr(k) < prmArr(k + 1) Then Exit For
  30.     Next k
  31.        
  32.     If k Then
  33.         t = n
  34.         While t > k And prmArr(k) >= prmArr(t)
  35.             t = t - 1
  36.         Wend
  37.         tmp = prmArr(k): prmArr(k) = prmArr(t): prmArr(t) = tmp
  38.         t = n
  39.         For i = k + 1 To (n + k) \ 2
  40.             tmp = prmArr(i): prmArr(i) = prmArr(t): prmArr(t) = tmp
  41.             t = t - 1
  42.         Next i
  43.         MyNarayanaNextPerm = i
  44.     End If
  45. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут