Implementeu una funció RECURSIVA que, donada una pila d’enters, retorna una pila amb els mateixos elements, excepte que s’han esborrat els 0’s que originalment tenien un nombre parell d’elements per sota seu, i s’han esborrat els 1’s que originalment tenien un nombre senar d’elements per sota seu. Aquesta és la capcelera:
// Pre: // Post: Retorna la pila resultant d'esborrar en s tots els 0s que originalment tenien un nombre // parell d'elements per sota, i tots els 1s que originalment tenien un nombre senar d'elements // per sota. stack<int> remove01(stack<int> s);
Aquí tenim un exemple d’entrada i sortida de la funció, a on es mostren els elements de les piles des del fons de la pila a l’esquerra fins al top de la pila a la dreta:
0 1 4 5 1 0 6 7 0 0 1 1 8 1 0 9 0 0 1 1 0 1 => 4 5 1 0 6 7 0 1 8 9 0 1
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 piles. Heu de trobar una solució RECURSIVA i eficient del problema. Podeu crear funcions auxiliars per tal de millorar l’eficiència.
Una implementació no eficient que superi honestament els jocs de proves públics us permetrà obtenir una nota raonable, però per a superar tots els jocs de proves i obtenir la màxima nota haureu de pensar en una manera de fer-ho eficient.
-1 -2 0 0 => -1 -2 0 1 9 -6 -3 0 6 0 4 -1 -5 => 1 9 -6 -3 6 4 -1 -5 -9 -5 -7 => -9 -5 -7 1 -9 0 6 1 1 1 10 1 -8 5 1 -3 0 0 1 1 0 1 => 1 -9 6 1 1 10 1 -8 5 -3 0 1 0 1 1 0 7 1 8 1 => 1 0 7 8 0 -1 1 -1 4 4 -7 0 1 0 -8 -9 0 0 0 0 -9 -4 => -1 1 -1 4 4 -7 0 1 0 -8 -9 0 0 -9 -4 8 7 -2 1 1 -7 0 0 0 1 0 3 1 1 0 => 8 7 -2 1 -7 0 3 1 0 1 -6 1 -7 5 8 0 1 1 4 -2 -5 0 1 1 1 -7 0 0 => -6 -7 5 8 0 1 4 -2 -5 0 1 1 -7 0 0 1 1 2 1 1 0 0 0 1 => 1 2 1 0 1 0 6 0 7 0 -10 -9 -3 0 4 => 1 0 6 0 7 0 -10 -9 -3 0 4