我已经注册了AP Computer Science Principles。我们的课堂课程使用的是javascript语言,但是我们的老师希望我们习惯于伪编码,因为AP考试采用的是这种风格。我一直在研究教科书中的问题,有一个我不太了解。
我的答案接近C,但是数组中的最后一项不同。在最后一次重复中,将list [6]分配给temp值,即44。那么,为什么最后的数组值C是33?我做错了吗?有人可以指导我完成这些程序并解释我的错误吗?
答案 0 :(得分:2)
在图像右侧的跟踪中,在第二步中,您有temp = 11
。然而,这种情况并非如此。就像您刚刚设置了list[2] = 33
一样,温度应该是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
答案 1 :(得分:0)
假设问题中奇数代码中的数组是一索引而不是零索引,答案是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开始,切换第i
个元素和第i + 1
个元素的位置。因此,第一个元素被第二个元素切换,然后第二个元素(刚刚切换的元素)被第三个元素切换,依此类推。最后,您将第一个元素从数组的开头移到结尾。如果您在每次迭代期间都记录阵列,则将更加清楚:
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);
}