Связь чисел Фибоначчи и числа "сочетаний" - QBasic

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

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

Чтобы понять о чем идет речь я приведу частный пример. дано 5 натуральных чисел 1, 2, 3, 4, 5. составим из этих чисел следующие сочетания. Порядок строго соблюдается!! 1) 1, 2, 3, 4, 5 2) 12, 3, 4, 5 3) 1, 23, 4, 5 4) 1, 2, 34, 5 5) 1, 2, 3, 45 6) 1, 23, 45 7) 12, 3, 45 8) 12, 34, 5 Нужно составить программу, которая для произвольного числа N могла бы сосчитать число приведенных выше в качестве примера сочетаний. Алгоритм к моему удивлению алгоритм оказался прост, точно такой же (рекурсия) каким вычисляются числа Фибоначчи. то есть количество сочетаний (n)= Фибоначчи(n+1) Вопрос Как обобщить программу, чтобы она вычисляла количество любых сочетаний? то есть в нашем примере должны добавиться и такие сочетания 9) 123, 45 10) 12345 11) и так далее. Сколько их?
Листинг программы
  1. REM
  2. REM 1 23 4 56 78 9 ... N
  3. REM
  4. REM Fibonachi AND "Sochetania"
  5. REM
  6. DECLARE FUNCTION f! (n!)
  7. CLS
  8. FOR i = 1 TO 20
  9. PRINT f(i)
  10. NEXT
  11. END
  12. FUNCTION f (n)
  13. IF n <= 3 THEN
  14. f = n
  15. ELSE
  16. f = f(n - 1) + f(n - 2)
  17. END IF
  18. END FUNCTION

Решение задачи: «Связь чисел Фибоначчи и числа "сочетаний"»

textual
Листинг программы
  1. DIM a(1 TO 20) AS LONG, i AS LONG, j AS LONG, m AS LONG, k AS LONG, n AS LONG, p AS LONG, txt AS STRING
  2. n = 5 'количество чисел
  3. m = n - 1 'количество запятых
  4. FOR k = m TO 0 STEP -1 'перебираем запятые между числами, от n-1 зяпятых до 0
  5.     IF k = 0 THEN 'если запятых нет, то просто выводим ряд чисел
  6.         txt = ""
  7.         FOR i = 1 TO n
  8.             txt = txt + LTRIM$(STR$(i))
  9.         NEXT i
  10.         PRINT txt
  11.     ELSE
  12.         FOR i = 1 TO k: a(i) = i: NEXT i
  13.         IF k = m THEN p = 1 ELSE p = k
  14.         DO 'генерация всех сочетаний из m по k
  15.             'вывод чисел
  16.             j = 0
  17.             txt = ""
  18.             FOR i = 1 TO k
  19.                 WHILE j < a(i)
  20.                     j = j + 1
  21.                     txt = txt + LTRIM$(STR$(j))
  22.                 WEND
  23.                 txt = txt + ","
  24.             NEXT i
  25.             FOR i = j + 1 TO n
  26.                 txt = txt + LTRIM$(STR$(i))
  27.             NEXT i
  28.             PRINT txt
  29.            
  30.             IF a(k) = m THEN p = p - 1 ELSE p = k
  31.             IF p THEN
  32.                 FOR i = k TO p STEP -1
  33.                     a(i) = a(p) + i - p + 1
  34.                 NEXT i
  35.             END IF
  36.         LOOP WHILE p
  37.     END IF
  38. NEXT k
  39. PRINT "Kol-vo:"; 2 ^ m

Объяснение кода листинга программы

Код представляет собой реализацию вычисления чисел Фибоначчи и их связи с числами сочетаний. Вот список действий, которые происходят в коде:

  1. Задаются константы:
    • n = 5 - количество чисел в ряду (общее количество чисел Фибоначчи, которые будут выведены).
    • m = n - 1 - количество запятых между числами в ряду (количество чисел сочетаний, которые будут выведены).
  2. В цикле перебираются запятые между числами, от n-1 запятых до 0:
    • Если запятых нет, то просто выводится ряд чисел.
    • Если есть запятая, то генерируются все сочетания из m по k (количество чисел сочетаний, которые будут выведены).
  3. В подцикле генерируются все числа сочетаний от m до k:
    • Выводятся числа сочетаний.
    • Если a(k) = m, то p = p - 1 (поскольку последнее число сочетаний уже было выведено).
    • Если p не равно 0, то в цикле перебираются числа от k до p, при этом a(i) присваивается a(p) + i - p + 1 (поскольку числа Фибоначчи определяются как a(i) = a(i-1) + a(i-2)).
  4. После завершения цикла выводится общее количество чисел сочетаний, которое равно 2 в степени m.

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


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

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

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

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

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

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