国际空间研究组织 | ISRO CS 2018 |问题 24
数组 A 由位置 A[0]、A[1] ….A[n-1] 中的 n 个整数组成。需要将数组的元素循环向左移动 k 个位置,其中 1 <= k <= (n-1)。下面给出了一个在线性时间内不使用另一个数组的不完整算法。填空完成算法。假设 alt 变量被适当地声明。
min = n; i = 0;
while (___________) {
temp = A[i]; j = i;
while (________) {
A[j] = ________
j= (j + k) mod n ;
If ( j< min ) then
min = j;
}
A[(n + i — k) mod n] = _________
i = __________
(A) i > min; j!= (n+i)mod n; A[j + k];温度;我 + 1 ;
(B) i < 分钟; j!= (n+i)mod n; A[j + k];温度;我 + 1; (C) i > min; j!= (n+i+k)mod n; A[(j + k)];温度;我 + 1;
(D) i < 分钟; j!= (n+ik)mod n; A[(j + k)mod n];温度;我 + 1;
答案: (D)
解释:在问题给出的五个空格中,最后两个空格必须是 temp 和 i+1,因为第四个和第五个空格的所有给定选项都有 temp 和 i+1。
现在,对于第一个空白,它必须是 i 所以,第一个空白是 i < min 这意味着选项(B)或选项(D)是正确的。 假设选项 (B) 是正确的,那么在我们有 j!=(n+i)modn 的括号中 这意味着每当 j 等于 (n+i)modn 时,控制就会退出 while 循环。 现在 (n+i)modn=i 并且 j 总是等于 i 因为在代码的第 3 行我们将 i 的值分配给 j。 因此,如果选项 (B) 为真,则控制永远不会进入第二个 while 循环,但它必须进入第二个 while 循环才能移动编号。还剩 K 个名额。 因此,选项(D)是正确的。
这个问题的测验