📌  相关文章
📜  国际空间研究组织 | ISRO CS 2018 |问题 24

📅  最后修改于: 2022-05-13 01:58:04.687000             🧑  作者: Mango

国际空间研究组织 | 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 min 然后在 i=0 和 min=n 的初始情况下,控件退出 while 循环

所以,第一个空白是 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)是正确的。
这个问题的测验