Implementeu una funció ITERATIVA que, donades dues cues d’enters positius, obté una nova cua que conté, per a cada posició, el màxim dels valors de les cues de partida en les mateixes corresponents posicions. En cas que una de les cues no tingui un valor definit en una posició, s’agafa el valor de l’altra cua. Aquesta és la capcelera:
// Pre: Rep dues cues d'enters positius q1 i q2. // Post: Retorna una cua, on al seu front hi ha el màxim dels fronts de q1,q2, després, // en segon lloc el màxim dels segons llocs de q1,q2, i així successivament. // Quan una de les dues cues no té valors definits en alguna posició, la cua resultant hi té // el valor de l'altra cua en aquella posició. queue<int> maximumQueue(queue<int> q1,queue<int> q2);
Aquí tenim un exemple de comportament de la funció, a on es mostren els elements de les cues des del primer afegit a l’esquerra de tot, a l’últim afegit a la dreta de tot:
1 4 6 4 2 5 8 7 1 1 3 6 5 6 => 5 8 7 4 2 3 6 5 6
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. Si creeu funcions auxiliars, afegiu-hi les seves PRE/POST. En els bucles, incloeu l’invariant o una explicació del que s’aconsegueix després de l’i-èssim pas, i també la funció de fita/decreixement o una justificació de perquè el bucle acaba.
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. La justificació val 1 punt i consisteix en definir correctament les PRE/POST de les funcions auxiliars que afegiu i en definir correctament els invariants i funcions de fita dels bucles que implementeu.
8 1 8 6 8 2 7 2 6 5 6 => 8 2 8 6 8 2 6 5 7 1 8 2 9 7 7 9 9 9 5 2 2 6 => 9 7 7 9 9 9 5 2 2 6 1 4 6 4 2 5 8 7 1 1 3 6 5 6 => 5 8 7 4 2 3 6 5 6 3 4 3 2 2 9 9 6 6 5 5 7 1 6 7 => 6 6 5 5 7 9 9 7 9 8 4 5 3 1 1 1 3 7 3 6 => 9 8 7 5 6 1 1 6 8 7 7 9 6 4 7 9 2 7 7 9 1 2 2 8 1 => 9 8 7 7 9 6 4 7 8 1 3 1 2 3 2 4 6 3 7 1 8 3 8 3 9 => 4 6 3 7 2 8 3 8 3 9 7 6 2 6 5 7 5 7 3 4 3 1 5 4 => 7 7 3 6 5 7 5 4 6 4 7 6 5 3 6 3 2 3 9 4 3 1 1 8 3 => 6 9 7 6 5 3 8 3 2 4 7 3 6 2 3 7 5 3 8 9 6 2 6 2 5 9 5 7 => 8 9 6 6 6 3 7 9 5 7