Informatică, întrebare adresată de Ciupacabra14, 8 ani în urmă

Cerință
Considerăm un șir format din N elemente. Definim următoarele operații astfel:

permutare circulară la stânga: mutarea primului element la sfârșitul șirului 1 2 3 4 -> 2 3 4 1 -> 3 4 1 2
permutare circulară la dreapta: mutarea ultimului element la începutul șirului 1 2 3 4 -> 4 1 2 3 -> 3 4 1 2
Dându-se un șir format din N elemente și două numere K și P, să se permute cu K poziții la dreapta dacă P este -1, respectiv la stânga dacă P este 1.

Date de intrare
Pe prima linie se află 3numere: N , K și P. Pe următoarea linie se găsesc N numere naturale, reprezentând elementele șirului.

Date de ieșire
Se vor afișa N numere pe o singură linie, separate printr-un spațiu, reprezentând elementele șirului obținut în urma operațiilor de permutare.

Restricții
1 ≤ N ≤ 1.000.000
0 ≤ K ≤ 1.000.000
Elementele șirului sunt numere naturale cuprinse între 1 și 1.000
P poate avea doar valorile 1 și -1
Exemplu
Date de intrare Date de ieșire
4 1 -1
1 2 3 4 4 1 2 3
4 2 1
1 2 3 4 3 4 1 2

Răspunsuri la întrebare

Răspuns de lucaciucandrei
5

COROANA TE ROG!!!

#include<iostream>

using namespace std;

void ps(int v[], int n){

   int x=v[n];

   for(int i=n; i>=2; i--) v[i]=v[i-1];

   v[1]=x;

}

void pd(int v[], int n){

   int x=v[n];

   for(int i=n-1;i>=1;i--) v[i+1]=v[i];

   v[1]=x;

}

int main(){

   int n, p, k, v[1000001];

   cin>>n;

   for(int i=1;i<=n;i++) cin>>v[i];

   cin>>k>>p;

   if(p==-1)

       while(k!=0){

           pd(v, n);

           k--;

       }

   else

       while(k!=0){

           ps(v, n);

           k--;

       }

   for(int i=1;i<=n;i++) cout<<v[i]<<' ';

}

Alte întrebări interesante