0

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

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

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

2 回答 2

2

好的,

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

意味着,我们将上升到数组的一半。

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

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

好吧,ap一个ak-p+1p数组 start中的第一个元素,另一个p是 end中的第一个元素。

所以,总结一下

n您将-th first 与-th last 数组值交换到n数组的一半。然后呢?数组颠倒了

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

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

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

编辑.

I)好吧,正如您发布的那样,数组的范围从a1ak

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

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

当然,由于您在第2行覆盖a了,因此您必须将旧值存储在一个临时值中,即.batemp

于 2010-08-29T15:19:34.083 回答
0

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

于 2010-08-29T15:13:09.580 回答