【问题标题】:Identifying the programming language the following code is written in识别编程语言,编写以下代码
【发布时间】:2018-04-28 10:28:53
【问题描述】:

我刚开始学习计算机编程,我想了解更多关于编程算法的知识。我买了一些参考书。但是,当我阅读本书时,我发现了一些这样的代码:

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)

我学过一些 C 语言的基础知识,但是我没有看到那种代码,我也看不懂算法。有谁知道上述代码的编程语言是什么?非常感谢!

【问题讨论】:

  • 虽然有些语言有左箭头之类的符号,但它可能只是伪代码,请用类似代码的语言来描述算法。在不知道您找到所显示代码的书或上下文的情况下,真的没有人能说什么了。
  • 本书本身很可能描述了其第一章中使用的符号。

标签: algorithm programming-languages pseudocode


【解决方案1】:

我猜这是pseudocode。看起来语法的含义如下:

  • function F(x) 用一些 参数 声明一个新的 函数 F
  • Q &lt;- value 为名为 Q 的变量赋值,如果 Q 不存在则创建它
  • someFunction(x) 调用 someFunction,传入参数x
  • whilewhile loop
  • if...then 是一个 if 语句,与 C 中的相同,但语法更接近英语
  • return x 退出当前函数并返回 x 作为它的返回值,如果没有指定返回值则没有返回值(C 术语中的 void 函数)
  • |Q| 产生集合 Q 的大小
  • &lt; 与 C 和数学中的含义相同(小于运算符)
  • Q[i] 产生集合 Q 中位置 i 的元素
  • ^ 可能意味着逻辑与,因为这就是数学中的意思

【讨论】:

    【解决方案2】:

    简答

    调用 Get-number(n) 返回 nth 个最小的自然数,它只有 2、3 或 5 作为质因数。此类数字的列表如下所示:

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

    详细说明

    完整的代码有两个功能。我会一一解释每一步。

    获取号码(n)

    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] &lt; 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 的最后一个值。

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 2018-06-30
      • 2014-02-11
      • 2011-04-09
      • 2011-05-17
      • 2015-06-15
      • 2011-04-22
      • 2011-04-05
      相关资源
      最近更新 更多