Esborra la última ocurrència del primer element parell en una llista X42226


Statement
 

pdf   zip   main.cc

html

Implementeu una funció ITERATIVA que, donada una llista d’enters positius passada per referència, considera el valor parell x que es troba més proper al principi de la llista, i esborra la ocurrència de x que es troba més propera al final de la llista. En cas que la llista no tingui cap valor parell, llavors la funció no fa cap canvi. Aquesta és la capcelera:

// Pre: l és una llista d'enters positius.
// Post: Modifica l eliminant ocurrència més propera al final de la llista
//       del valor parell x que estigui més proper al principi de la llista.
void removeLastOccurrenceOfFirstEven(list<int> &l);

Aquí tenim un exemple de com canvia una llista en cridar a la funció:

5 4 1 8 9 7 9 9 8 4 2 5 10 3 9
=>
5 4 1 8 9 7 9 9 8 2 5 10 3 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 llistes. Heu de trobar una solució ITERATIVA i eficient del problema. Podeu tenir més d’un bucle, i funcions auxiliars si ho considereu oportú. En els bucles, incloeu l’invariant o una explicació del que s’aconsegueix després d’un cert nombre de passos, i també la funció de fita/decreixement o una justificació de perquè el bucle acaba.

Avaluació sobre 10 punts:

  • Solució lenta: 6 punts.
  • Solució lenta + justificació: 8 punts.
  • solució ràpida: 8 punts.
  • solució ràpida + justificació: 10 punts.
Sample session
2 5 4 2 6 2 5 1 4 2 3 2 3 2 6 5 1 1 5 5
=>
2 5 4 2 6 2 5 1 4 2 3 2 3 6 5 1 1 5 5
=>
2 5 4 2 6 2 5 1 4 2 3 3 6 5 1 1 5 5
=>
2 5 4 2 6 2 5 1 4 3 3 6 5 1 1 5 5
=>
2 5 4 2 6 5 1 4 3 3 6 5 1 1 5 5
=>
2 5 4 6 5 1 4 3 3 6 5 1 1 5 5
=>
5 4 6 5 1 4 3 3 6 5 1 1 5 5
=>
5 4 6 5 1 3 3 6 5 1 1 5 5
=>
5 6 5 1 3 3 6 5 1 1 5 5
=>
5 6 5 1 3 3 5 1 1 5 5
=>
5 5 1 3 3 5 1 1 5 5
=>
5 5 1 3 3 5 1 1 5 5
Information
Author
PRO1
Language
Catalan
Official solutions
Unknown.
User solutions
C++