# PBinfo #895 – PermutarePF – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerinţa
Se numește permutare a unei mulțimi o aranjare a elementelor mulțimii în altă ordine. De exemplu, permutările mulțimii {1,2,3} sunt: (1,2,3), (1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1).

Fie (p1, p2, ..., pn) o permutare a mulțimii {1,2,...,n}. Se numește punct fix al permutării o valoare k din mulțime cu proprietatea că pk = k.

Scrieţi definiția completă a subprogramului C++ permutare care are 2 parametri:  a, prin care primeşte un tablou unidimensional  cu maximum 100 de numere naturale mai mici decât 1000 și n, numărul efectiv de elemente ale tabloului.

Subprogramul verifică dacă elementele vectorului a reprezintă o permutare fără puncte fixe a mulțimii {1,2,...,n} și returnează valoarea 1 în caz afirmativ, respectiv 0 în caz negativ.

Restricţii şi precizări

0 < n <= 100
numele subprogramului cerut este permutare
parametrii sunt, în această ordine: a, n, cu semnificația de mai sus
elementele vectorului a sunt indexate de la zero

Exemplu:
Dacă n=6 și a=(2,3,1,6,4,5) subprogramul va returna valoarea 1.

Dacă n=4 și a=(2,3,1,4) subprogramul va returna valoarea 0, deoarece permutarea are un punct fix.

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
int permutare(int * a , int n)
{
	int v[105];
	for(int i = 1 ; i <= n ; i ++)
		v[i] = 0;
	for(int i = 0 ; i < n; i ++)
		if(a[i] < 1 || a[i] > n || a[i] == i + 1)
			return 0;
		else
			v[a[i]] ++;
	for(int i = 1 ; i <= n ; i ++)
		if(v[i] != 1)
			return 0;
	return 1;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/895)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/895/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-895/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
