Grade 9 · One-dimensional arrays (vectors)Citește în română
Circular shift to the right
Original: Permutarea circulară la dreapta
O(n)C++1742 lines1 example
The idea
Every element moves one position to the right, and the last one goes to the first position. We save v[n], shift the rest from the end towards the beginning (v[i] = v[i - 1]) and put the saved value in v[1].
Original description (Romanian)
Fiecare element se mută cu o poziție la dreapta, iar ultimul ajunge pe prima poziție. Salvăm v[n], mutăm restul de la capăt spre început (v[i] = v[i - 1]) și punem valoarea salvată în v[1].
- Complexity
- O(n)
- Grade
- Grade 9 (Clasa a IX-a)
Examples
Example 1
Input
5 1 2 3 4 5
Expected output
5 1 2 3 4
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Permutarea circulară la dreapta
* Clasa: 9
* Capitol: Tablouri unidimensionale (vectori)
* Descriere: Fiecare element se mută cu o poziție la dreapta, iar ultimul
* ajunge pe prima poziție. Salvăm v[n], mutăm restul de la capăt spre
* început (v[i] = v[i - 1]) și punem valoarea salvată în v[1].
* Complexitate: O(n)
*
* Exemplu
* Intrare:
* 5
* 1 2 3 4 5
* Ieșire: 5 1 2 3 4
*/
#include <iostream>
using namespace std;
int v[1001];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
}
int ultimul = v[n];
for (int i = n; i > 1; i--)
{
v[i] = v[i - 1];
}
v[1] = ultimul;
for (int i = 1; i <= n; i++)
{
cout << v[i] << ' ';
}
cout << '\n';
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.