Implementeu una funció ITERATIVA que, donada una cua de naturals, retorna una nova cua que és idèntica a la inicial, excepte que cada 0 s’ha reemplaçat per la suma dels elements a posició parell que apareixen abans d’aquest 0 (en la cua original).
Sobreentenem que el primer element de la cua està a posició 0, el següent a posició 1, el següent a posició 2, i així successivament. Aquesta és la capcelera:
// Pre: Sigui Q el valor inicial de la cua q que es rep com a paràmetre. // Els valors guardats a Q son majors o iguals a 0. // Post: Sigui Q' la cua retornada. Q i Q' tenen el mateix nombre d'elements. // A més a més, per a cada posició p de Q', si Q té un valor x diferent de 0 a posició p, // llavors Q' també té x a posició p. // En canvi, si Q té valor 0 a posició p, llavors el valor de Q' a posició p és // la suma de tots els valors de Q a posició parell abans que p. queue<int> replace0sWithPreviousSumPosEven(queue<int> q);
Aquí tenim un exemple de comportament de la funció, a on les cues es representen tenint el primer element de la cua a l’esquerra i l’últim element de la cua a la dreta:
replace0sWithPreviousSumPosEven([1 3 0 0 1 3 2 0 5 0 9]) = [1 3 1 1 1 3 2 4 5 9 9]
Observació Només cal enviar el procediment demanat; el programa principal serà ignorat.
Observació
La vostra funció i subfuncions que creeu han de treballar només amb cues. Heu de trobar una solució ITERATIVA i eficient del problema.
Avaluació sobre 10 punts:
Entenem com a solució lenta una que és correcta i capaç de superar els jocs de proves públics. Entenem com a solució ràpida una que és correcta i capaç de superar els jocs de proves públics i privats.
replace0sWithPreviousSumPosEven([1 0 8 4 2 5 0 6 7 8 9 7]) = [1 1 8 4 2 5 11 6 7 8 9 7] replace0sWithPreviousSumPosEven([9 5 2 1 4 4 8 8 1 3 5 3 0 0 2 9 1 6]) = [9 5 2 1 4 4 8 8 1 3 5 3 29 29 2 9 1 6] replace0sWithPreviousSumPosEven([7 0 7 9 4 3 1 1 7]) = [7 7 7 9 4 3 1 1 7] replace0sWithPreviousSumPosEven([7 0 7 9 4 3 2 7 1 2 1 3 0 0 2]) = [7 7 7 9 4 3 2 7 1 2 1 3 22 22 2] replace0sWithPreviousSumPosEven([6 7 8 8 0 2 0 2 5 1 7 4 0 5 8 4]) = [6 7 8 8 14 2 14 2 5 1 7 4 26 5 8 4] replace0sWithPreviousSumPosEven([0 3 3 4 9 3 0 8 0 0 7 6 0 7 3]) = [0 3 3 4 9 3 12 8 12 12 7 6 19 7 3] replace0sWithPreviousSumPosEven([9 2 0 5 5 8 9 1 5 8 3 2 0 4 9 0]) = [9 2 9 5 5 8 9 1 5 8 3 2 31 4 9 40] replace0sWithPreviousSumPosEven([4 6 4 7 3 8 9 6 0 5 1 1 1 4 0 9 2 0]) = [4 6 4 7 3 8 9 6 20 5 1 1 1 4 22 9 2 24] replace0sWithPreviousSumPosEven([0 0 3 4 7 8 1 3 9 6 5 5 9 0 0 5 0]) = [0 0 3 4 7 8 1 3 9 6 5 5 9 34 34 5 34] replace0sWithPreviousSumPosEven([0 0 8 7 0 2 3 7 6 0 9 7 0 9 9 2 3 0 8]) = [0 0 8 7 8 2 3 7 6 17 9 7 26 9 9 2 3 38 8]