Suma de parells i senars en una pila X39544


Statement
 

pdf   zip   main.cc

html

Implementeu una funció RECURSIVA que, donada una pila d’enters

P = [a1, a2, a3, a4, …, an−2, an−1, an]

a on es representen els elements de la pila començant per l’esquerra amb el fons de la pila (a1 és l’element del fons, a2 és el següent des del fons, i així successivament), retorna una pila P' tal que si l’element ai de la pila P és senar, llavors a la posició ai de la pila P' hi haurà la suma de tots els senars que hi hagi a P a les posicions [a1, a2, …, ai]. Si la posició és parell, serà igual però amb la suma dels parells.

El número zero s’assumeix que és parell, i els nombres negatius tenen la paritat del número positiu (és a dir, el −5 és senar, i el −24 és parell).

  • PRE P és una pila d’enters.
  • POST Torna P' tal que si ai a la pila P és parell, a ai de la pila P' hi haurà la suma de tots els parells que hi ha a P a les posicions [a1, a2, …, ai]. Si és senar, la suma dels senars.
stack<int> SumParellSenar(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:

SumParellSenar([5, 4, 1, 8, 9, 7]) = [5, 4, 6, 12, 15, 22]

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. Si fos el cas, podeu crear funcions auxiliars per tal de millorar l’eficiència.

A les crides recursives, incloeu la hipòtesi d’inducció, és a dir una explicació del que es cumpleix després de la crida, i també la funció de fita/decreixement.

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.

Avaluació sobre 10 punts:

  • Solució lenta: 6 punts.
  • Solució lenta + H.I. + fita: 8 punts.
  • solució ràpida: 8 punts.
  • solució ràpida + H.I. + fita: 10 punts.

Una solució iterativa a aquest problema tindrà un zero, independentment de si passa o no el jocs de proves.

Public test cases
  • Input/Output

    SumParellSenar(10) → 10
    SumParellSenar() →
    SumParellSenar(5, 4, 1, 8, 9, 7) → 5 4 6 12 15 22
    SumParellSenar(1, 4, 0, 6, 3, 1, 8) → 1 4 4 10 4 5 18
    SumParellSenar(10, 2, 0, 10, 8, 5) → 10 12 12 22 30 5
    SumParellSenar(4, 6, 0, 10, 3, 10) → 4 10 10 20 3 30
    SumParellSenar(7, 10, 3, 7, 9) → 7 10 10 17 26
    SumParellSenar(8) → 8
    SumParellSenar(10, 7, 10, 4) → 10 7 20 24
    SumParellSenar(0, 10) → 0 10
    SumParellSenar(-1, 3, -12, 7, 4, 3, 1, -2) → -1 2 -12 9 -8 12 13 -10
  • Information
    Author
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++