Все перестановки числа 111222 - QBasic

Узнай цену своей работы

Формулировка задачи:

Число 111222 можно рассматривать как двоичное И чтобы получить все перестановки - надо к этому числу "прибавлять" 1 по правилу. 1+1=2, 2+1=11. До тех пор, пока не получится число 222111. Кроме того надо проверять чтобы число единичек равнялось число двоек. Эта программа делает как сказано выше (проверено)
Листинг программы
  1. REM 111222
  2. DECLARE FUNCTION SUM$ (x$)
  3. DECLARE FUNCTION f! (s1$, s2$)
  4. CLS
  5. DIM n AS STRING
  6. DIM n1 AS STRING
  7. DIM n2 AS STRING
  8. n1 = "111222"
  9. n2 = "222111"
  10. PRINT n1
  11. DO
  12. n = SUM(n1)
  13. IF f(n, (n2)) THEN PRINT n
  14. n1 = n
  15. LOOP UNTIL n = n2
  16. END
  17. FUNCTION f (s1 AS STRING, s2 AS STRING)
  18. DIM s AS STRING
  19. FOR i = 1 TO LEN(s1)
  20. s = MID$(s1, i, 1)
  21. k = INSTR(s2, s)
  22. IF k THEN MID$(s2, k, 1) = " "
  23. NEXT i
  24. s = LTRIM$(s2)
  25. IF s = "" THEN f = -1 ELSE f = 0
  26. END FUNCTION
  27. FUNCTION SUM$ (x AS STRING)
  28. DIM s AS STRING
  29. FOR i = LEN(x) TO 1 STEP -1
  30. s = MID$(x, i, 1)
  31. IF s = "2" THEN
  32. MID$(x, i, 1) = "1"
  33. GOTO 100
  34. ELSE
  35. MID$(x, i, 1) = "2"
  36. SUM = x
  37. EXIT FUNCTION
  38. END IF
  39. 100
  40. NEXT
  41. END FUNCTION

Решение задачи: «Все перестановки числа 111222»

textual
Листинг программы
  1. DECLARE FUNCTION MyNarayanaNextPerm(n AS LONG) AS LONG
  2. DATA 1,1,1,2,2,2
  3.  
  4. DIM SHARED prmArr(1 TO 6) AS LONG
  5. DIM n AS LONG, i AS LONG
  6.  
  7. n = 6
  8.  
  9. FOR i=1 TO n
  10.     READ prmArr(i)
  11. NEXT i
  12.  
  13. DO
  14.     FOR i = 1 TO n
  15.         PRINT prmArr(i);
  16.     NEXT
  17.     PRINT
  18. LOOP WHILE MyNarayanaNextPerm(n)
  19. 'Sleep
  20.    
  21. FUNCTION MyNarayanaNextPerm(n AS LONG) AS LONG
  22.     DIM i AS LONG, k AS LONG, t AS LONG
  23.    
  24.     FOR k = n - 1 TO 1 STEP -1
  25.         IF prmArr(k) < prmArr(k + 1) THEN EXIT FOR
  26.     NEXT k
  27.     IF k THEN
  28.         t = n
  29.         WHILE t > k AND prmArr(k) >= prmArr(t)
  30.         t = t - 1
  31.         WEND
  32.         SWAP prmArr(k), prmArr(t)
  33.         t = n
  34.         FOR i = k + 1 TO (n + k) \ 2
  35.            SWAP prmArr(i), prmArr(t)
  36.            t = t - 1
  37.         NEXT i
  38.         MyNarayanaNextPerm = i
  39.     END IF
  40. END FUNCTION

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


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

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

8   голосов , оценка 4 из 5

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

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

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