【问题标题】:Simple Pseudocode Code Question简单的伪代码问题
【发布时间】:2010-08-29 15:07:32
【问题描述】:

我对伪代码有点陌生。我明白代码在说什么,但很难把这些部分放在一起。我应该如何理解这段代码在做什么:

假设 a1, a2, . . . , ak 是一个由 k 个数字组成的数组。以下是做什么的 代码片段呢?简要说明原因。假设所有缩进的行 属于循环内部。

1 for p := 1 to ⌊k/2⌋
2     t := ap
3     ap := ak−p+1
4     ak−p+1 := t

【问题讨论】:

  • 这就是为什么我真的不喜欢命令式伪代码。基本上是没什么。当然,几乎不可能检测到一个错误的错误。比较 ;) reverse [] = []; reverse (h:t) = (reverse t) ++ [h]
  • 我也非常不喜欢非 ASCII 码。如果你不知道k/2 周围那些有趣的符号是什么意思,就没有办法“只用谷歌搜索”。如果它改为floor,您可以在此站点上搜索并轻松找出它应该做什么。

标签: pseudocode


【解决方案1】:

好的,

1 for p := 1 to ⌊k/2⌋

意思是,我们要上升到数组的一半。

2 t := ap
3 ap := ak−p+1
4 ak−p+1 := t

这种模式可以被识别为“与临时t 交换”。什么是交换的?

嗯,apak-p+1,一个是 p-数组开头的第一个元素,另一个是 p-数组末尾的第一个元素.

所以,总结一下

您首先将n-th 与n-th 最后一个数组值交换到数组的一半。然后呢? 数组颠倒了

请注意,您的伪代码格式看起来很奇怪 - 而且,最重要的是 - 模棱两可。

ak-p+1 是否等同于 a[k-p+1]a[k]-p+1a[k-p]+1?如果不是,你是如何表达其他的。

因此,首先,我将把这段代码转换为像 Python 这样的实际源代码,这样更容易阅读。

编辑

我)好吧,正如您所发布的,数组范围从 a1ak

II) 想想如何交换两个变量的值(ab):

1 temp := a
2 a    := b
3 b    := temp

当然,由于您在 2 行中用b 覆盖了a,因此您必须将旧的a 值存储在一个临时的temp 中。

【讨论】:

  • 这是一个非常糟糕的伪代码符号。怎么知道 ak-p+1 的意思是 a[k-p+1] 或 a[k] - p + 1。
  • 我对编程很陌生,所以识别这些模式对我来说还不是常识。 “与临时 t 交换”到底是什么意思?另外,数组从什么值开始,数组在什么值停止?
  • 编辑了问题。一步一步来!
【解决方案2】:

循环将数组镜像到其中心元素,因为它将 a[p] 更改为 a[k-p+1],其中 a[p] 始终位于数组的“左侧”,而 a[k-p +1] 总是在“右边”。 t 是一个临时变量。

【讨论】:

  • 嗯好的。那么这到底是什么意思呢?当我在那里运行一些数字时,它似乎需要 a[k]-1 并且每次循环运行时它都会减一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多