Rotacions sobre llista S30741


Statement
 

pdf   zip   main.cc

Implementa l’acció genèrica:

template <typename T>
void apply_rotations(list<T>& data, const list<int>& rotations);

que aplica, en ordre, cada rotació de la llista rotations sobre la llista data:

  • k>0k > 0: rotació a la dreta de kk posicions (els kk últims elements passen al davant).

  • k<0k < 0: rotació a l’esquerra de |k||k| posicions (els |k||k| primers elements passen al final).

  • k=0k = 0: no fa res.

Exemple

	data inicial:   [3, a, 7, b, 2, x]
rotations:      [2, -1, 4, -6, 3]

Rotació  +2  ->  [2, x, 3, a, 7, b]   (2 últims al davant)
Rotació  -1  ->  [x, 3, a, 7, b, 2]   (1 primer al final)
Rotació  +4  ->  [a, 7, b, 2, x, 3]   (4 últims al davant)
Rotació  -6  ->  [a, 7, b, 2, x, 3]   (|-6|%6 = 0, no canvia)
Rotació  +3  ->  [2, x, 3, a, 7, b]   (3 últims al davant)

Observacions

  • Les funcions i accions que creïs han de treballar només amb llistes (la classe list de la biblioteca STL) o arrays dinàmics. Has de trobar una solució ITERATIVA i eficient del problema.

  • Cal aplicar cada rotació de manera individual. No es permet acumular les rotacions en una sola operació.

  • Tota funció/acció que creïs ha de tenir la corresponent Precondició (Pre) i Postcondició (Post).

  • En els bucles inclou l’invariant del bucle i la funció de fita.

IMPORTANT: Només cal enviar el procediment demanat; el programa principal serà ignorat.

Public test cases
  • Input/Output

    apply_rotations([3, 7, 2, 8, 1, 5], [2, -1, 4, -6, 3]) → [1, 5, 3, 7, 2, 8]
    apply_rotations([1, 2, 3, 4, 5], [1, 2, 3]) → [5, 1, 2, 3, 4]
    apply_rotations([10, 20, 30, 40], [-1, -2, -3]) → [30, 40, 10, 20]
    apply_rotations([5, 3, 8, 1], [3, -3]) → [5, 3, 8, 1]
    apply_rotations([1, 2, 3], [3, 0, -3, 6, 1]) → [3, 1, 2]
    apply_rotations([], [1, -2, 3]) → []
  • Information
    Author
    Bernardino Casas
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++