Lacăt cu cifru

Un lacăt cu cifru cu k role, fiecare rolă având n poziții (de la 0 la n-1), poate fi stocat în memorie printr-o matrice dată, LOCK, cu k linii şi n coloane, inițial fiecare linie conținând numerele de la 0 la n-1. Codul de acces care deschide lacătul este codificat prin rotiri circulare spre dreapta ale fiecărei role i cu p_i poziții (echivalent cu o permutare circulară la dreapta a liniei i cu p_i poziții), iar p_i este orice număr natural, deci poate fi mai mare decât n-1 (s-a notat cu p_i al i-lea element din vectorul p). Acest cod este dat sub forma unui vector p cu k elemente. Codul care deschide lacătul este combinația din coloana C a matricei LOCK, după efectuarea rotirilor.

a) Scrieți o funcție UNLOCK care permută circular liniile matricei și care afișează codul care deschide lacătul.

void UNLOCK(int LOCK[][100], int n, int k, int p[], int C);

b) Scrieți o funcție UNLOCK care afișează codul care deschide lacătul, fără a folosi matricea LOCK.

void UNLOCK(int n, int k, int p[], int C);

Indicație: Se va utiliza o funcţie care permută circular dreapta cu o poziţie componentele unui vector.