# PBinfo #4255 – rotire_secvente – Rezolvare C++

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

## Enunț

Cerința
Se dă un vector cu n elemente, numere naturale, și un număr k, divizor al lui n. Se împarte vectorul în k secvențe disjuncte, numerotate de la 1 la k. Să se permute circular cu o poziție spre stânga elementele din fiecare dintre cele k secvențe și să se afișeze pe ecran vectorul rezultat în urma acestor modificări.

Se vor defini și apela următoarele subprograme:


citire, care citește de la tastatură valoarea lui n, a lui k și cele n elemente ale tabloului
afisare, care afișează pe ecran elementele tabloului, separate prin exact un spațiu
permutare, care permută circular cu o poziție spre stânga elementele unei secvențe din tablou precizata prin cele două extremități st și dr.

În programele C/C++ nu se vor folosi variabile globale.

Date de intrare
Programul citește de la tastatură numerele n și k, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieșire
Se vor afișa pe ecran elementele tabloului după modificarea cerută, separate prin exact un spațiu.

Restricții și precizări

1 ≤ k < n ≤ 1000, k este divizor al lui n
cele n numere citite vor fi mai mici decât 1000

Exemplu:
Intrare

15 5
3 6 4 7 6 6 6 4 6 7 6 6 4 4 5 
Ieșire

6 4 3 6 6 7 4 6 6 6 6 7 4 5 4 
Explicație
Vectorul se împarte în 5 secvențe: (3 6 4), (7 6 6), (6 4 6), (7 6 6) și (4 4 5). Elementele din fiecare dintre ele se permută circular cu o poziție spre stânga și se obține secvențele (6 4 3), (6 6 7), (4 6 6), (6 6 7) și (4 5 4).

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
void citire(int A[], int &n, int &k)
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>A[i];
}
void afisare(int A[], int n)
{
    for(int i=1;i<=n;i++)
        cout<<A[i]<<" ";
}
void permutare(int A[], int st, int dr)
{
    int aux=A[st];
    for(int i=st;i<dr;i++)
        A[i]=A[i+1];
    A[dr]=aux;
}
int main()
{
    int A[1001],n,k,x;
    citire(A,n,k);
    x=n/k;
    for(int i=1;i<=n-x+1;i=i+x)
        permutare(A,i,i+x-1);
    afisare(A,n);
    return 0;
}
```

## Resurse

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