我注册了AP计算机科学原理。我们的课堂课程是用javascript编写的,但是我们的老师希望我们能够适应伪码,因为AP考试就是这样的。我一直在研究教科书中的问题,但有一个问题我不太明白。

我的答案接近C,但是数组中的最后一项是不同的。在最后一次重复中,list6被赋值为temp值,即44。那么,为什么最后的数组值以C表示呢?我做错问题了吗?有人能指导我通过程序并解释我的错误吗??
发布于 2018-12-17 02:33:16
在图像右侧的跟踪中,在第二步中,您有temp = 11。然而,情况并非如此。温度应该是33,因为您刚刚设置了list[2] = 33。在其他步骤中也会犯同样的错误。
把它想成这样。在每一步中,都设置list[k+1] = 33。然后像这样递增,k = k + 1。所以当你设置temp = list[k]时,它总是33。
1.
temp = 33
list1 = 11
list2 = 33
2.
temp = 33
list2 = 66
list3 = 33
3.
temp = 33
list3 = 22
list4 = 33
4.
temp = 33
list4 = 44
list5 = 33
5.
temp = 33
list5 = 55
list6 = 33发布于 2018-12-17 02:34:21
假设问题中的奇数代码中的数组是一个索引的而不是零索引的,答案是C.将代码转换为Javascript:
const list = [33, 11, 66, 22, 44, 55];
const n = list.length - 1;
let k = 0;
for (let i = 0; i < n; i++) {
const temp = list[k];
list[k] = list[k + 1];
list[k + 1] = temp;
k = k + 1;
}
console.log(list);
或者,将其翻译成英文:对于数组中的每个索引i,从索引0开始,切换ith元素和i + 1th元素的位置。因此,第一个元素与第二个元素切换,然后第二个元素(刚刚切换的元素)与第三个元素切换,依此类推。最后,将第一个元素从数组的开头移到末尾。如果您在每次迭代中记录数组,这将更加清楚:
const list = [33, 11, 66, 22, 44, 55];
const n = list.length - 1;
let k = 0;
for (let i = 0; i < n; i++) {
const temp = list[k];
list[k] = list[k + 1];
list[k + 1] = temp;
k = k + 1;
console.log(list);
}
图片右边的文本的问题是,它将每个list#都像原来的数组一样,而不是考虑到在此期间由于交换而发生了变化。
请注意,在Javascript中,问题中的代码显然是以某种方式表示的,如果需要,可以使用析构方法立即切换这些元素的位置,而不需要中间的temp变量:
const list = [33, 11, 66, 22, 44, 55];
const n = list.length - 1;
let k = 0;
for (let i = 0; i < n; i++) {
[list[k], list[k + 1]] = [list[k + 1], list[k]];
k = k + 1;
console.log(list);
}
https://stackoverflow.com/questions/53808265
复制相似问题