Идентифицируя язык программирования, следующий код написан на - PullRequest
0 голосов
/ 28 апреля 2018

Я только начал изучать компьютерное программирование и хочу больше узнать об алгоритме программирования. Я купил несколько справочников. Однако, когда я прочитал книгу, я обнаружил несколько кодов, подобных этому:

function Get-Number(n)
    Q ← NIL
    Enqueue(Q,1)
    While n > 0 do
        x ← Dequeue(Q)
        Unique-Enqueue(Q,2x)
        Unique-Enqueue(Q,3x)
        Unique-Enqueue(Q,5x)
        n ← n – 1
    return x

function Unique-Enqueue(Q,x)
    i ← 0
    while i < |Q| ^ Q[i] < x do
        i ← i + 1
    if i < |Q| ^ x = Q[i] then
        return
    Insert(Q,i,x)

Я изучил некоторые основы языка Си, но я не видел такого кода и не могу понять алгоритм. Кто-нибудь знает, какой язык программирования для вышеуказанных кодов? Большое вам спасибо!

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Краткий ответ

Вызов Get-number(n) возвращает n th наименьшее натуральное число, которое имеет только 2, 3 или 5 в качестве простых факторов. Список таких номеров выглядит так:

{1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, ...}

Подробное объяснение

Полный код имеет две функции. Я объясню каждый шаг один за другим.

Получить номер (п)

function Get-Number(n)
    Q ← NIL
    Enqueue(Q,1)
    While n > 0 do
        x ← Dequeue(Q)
        Unique-Enqueue(Q,2x)
        Unique-Enqueue(Q,3x)
        Unique-Enqueue(Q,5x)
        n ← n – 1
    return x
  • Создана пустая очередь с именем Q. На следующем шаге мы нажимаем 1 к нему, делая Q = [1].
  • Вынимаем самый правый номер x. Затем позвоните Unique-Enqueue(Q,2x), Unique-Enqueue(Q,3x) и Unique-Enqueue(Q,5x) соответственно.
  • В конце мы возвращаем окончательное значение x. Таким образом, мы отбрасываем очередь Q в конце функции и сохраняем только окончательное значение x.

В целом, если задан вход n, эта функция вернет вывод x, который можно получить после выполнения всех вызовов функции, как указано выше. Теперь давайте посмотрим на другую функцию.

Уникальные Епдиеий (Q, X) * * тысяча тридцать семь function Unique-Enqueue(Q,x) i ← 0 while i < |Q| ^ Q[i] < x do i ← i + 1 if i < |Q| ^ x = Q[i] then return Insert(Q,i,x) В текущем Q продолжайте двигаться вправо, пока не наберете номер не удовлетворяющий Q[i] < x, то есть найти первое число в очереди, перемещающееся слева направо, которое по крайней мере столь же велико, как x. Существует три возможных сценария. Если это число равно x, остановитесь. Если это число больше x, введите x перед этим числом. Если такого номера нет, введите x в конце. Пример дела Допустим, мы звоним Get-number(4): Первоначально Q = [1]. Q = [2,3,5] после первого цикла. Q = [3,4,5,6,10] после второго цикла. Q = [4,5,6,9,10,15] после третьего цикла. Q = [5,6,8,9,10,12,15,20] после четвертого цикла. Следовательно, Get-number(4) возвращает 4, поскольку это было последнее значение для нашего x.

0 голосов
/ 28 апреля 2018

Полагаю, это псевдокод . Похоже, смысл синтаксиса следующий:

  • function F(x) объявляет новую функцию F с некоторыми аргументом (ами)
  • Q <- value присваивает значение переменной с именем Q, создавая Q, если оно еще не существует
  • someFunction(x) вызывает someFunction, передавая аргумент x
  • while является в то время как цикл
  • if ... then - это оператор if , такой же, как в C, но с более английским синтаксисом
  • return x выходит из текущей функции и возвращает x в качестве возвращаемого значения или не возвращает значения, если не указано возвращаемое значение (void функция в терминологии C)
  • |Q| дает размер коллекции Q
  • < означает то же, что и в C и в математике (меньше, чем оператор)
  • Q[i] возвращает элемент в коллекции Q в позиции i
  • ^ вероятно означает логическое И, потому что это то, что оно означает в математике
...