Considere la siguiente función C en la que a[n] y b[m] son dos arreglos de enteros ordenados y c[n + m] es otro arreglo de enteros.
void xyz(int a[], int b [], int c[]) { int i, j, k; i = j = k = O; while ((i<n) && (j<m)) if (a[i] < b[j]) c[k++] = a[i++]; else c[k++] = b[j++]; }
¿Cuál de las siguientes condiciones se cumple después de la terminación del ciclo while? (GATE CS 2006)
(i) j < m, k = n+j-1, y a[n-1] < b[j] si i = n (ii) i < n, k = m+i-1 , y b[m-1] <= a[i] si j = m
(A) solo (i)
(B) solo (ii)
(C) ya sea (i) o (ii) pero no ambos
(D) ni (i) ni (ii)
Respuesta: (D)
Explicación: La función xyz() es similar a merge() de mergeSort(). Ambas condiciones (i) y (ii) son falsas en las secciones k = n+j -1 yk = m+i-1 respectivamente.
El ciclo while agrega elementos de a y b (el que sea más pequeño) a c y termina cuando cualquiera de ellos se agota. Entonces, cuando el bucle termina, ya sea i=n o j=m.
Supongamos que i=n. Esto significaría que todos los elementos de la array a se agregan a c => k deben incrementarse en n. c también contendría elementos j de la array b. Entonces, el número de elementos en c sería n+j y por lo tanto k=n+j.
De manera similar, cuando j=m, k=m+i.
Por lo tanto, la opción (D) es correcta. (Si k hubiera comenzado desde −1 y no desde 0 y hubiéramos usado ++k dentro del bucle, la respuesta habría sido la opción (C))
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA