922. Сдвинь элементы вправо
Задан одномерный
массив целых чисел длины n. Сдвиньте элементы массива вправо циклически на 1 позицию.
Вход. В первой строке задано количество элементов массива n (n ≤ 100).
Во второй строке заданы сами элементы массива, значение каждого из которых по
модулю не превышает 100.
Выход. В одной строке
выведите n чисел – новые
значения элементов массива.
Пример
входа |
Пример
выхода |
4 1 2 3 4 |
4 1 2 3 |
массив
Пусть m – входной массив целых чисел. Выведем сначала последний
элемент массива m[n – 1]. После чего
последовательно выведем все числа от m[0] до m[n – 2].
Рассмотрим
реализацию, в которой элементы массива будут реально переставляться. Для этого
необходимо в i-ую ячейку массива перенести элемент из (i – 1)-ой ячейки, 1 ≤ i
≤ n – 1. Отдельно
следует перенести элемент из (n – 1)-ой ячейки в
0-ую.
Реализация алгоритма
Объявим целочисленный массив m.
int m[101];
Читаем входные числа в массив m.
scanf("%d",&n);
for(i = 0; i < n; i++)
scanf("%d",&m[i]);
Выведем сначала последнее число
массива m[n – 1] – оно будет первым после циклического сдвига элементов
на одну позицию вправо.
printf("%d",m[n-1]);
Далее выведем все числа массива,
начиная с нулевого m[0] и до предпоследнего m[n – 2].
for(i = 0; i < n - 1; i++)
printf("
%d",m[i]);
printf("\n");
Реализация – с
перестановкой элементов
Объявим целочисленный массив m.
int m[101];
Читаем входные числа в массив m.
scanf("%d",&n);
for(i = 0; i < n; i++)
scanf("%d",&m[i]);
Запомним последний элемент
m[n – 1] в переменной temp.
temp = m[n-1];
Передвигаем элемент m[i
– 1] в m[i] (1 ≤ i ≤
n – 1).
for(i = n - 1; i > 0; i--)
m[i] = m[i - 1];
В начало массива присваиваем элемент,
который стоял в конце массива.
m[0] = temp;
Выводим результирующий массив.
for(i = 0; i < n; i++)
printf("%d
",m[i]);
printf("\n");
Реализация – STL rotate
Объявим целочисленный вектор.
vector<int> v;
Читаем входные данные.
scanf("%d", &n);
v.resize(n);
for (i = 0; i < n; i++)
scanf("%d", &v[i]);
Произведем сдвиг элементов массива
так, чтобы последний элемент стал первым.
rotate(v.begin(), v.begin() + n - 1, v.end());
Выводим результирующий массив.
for (i = 0; i < n; i++)
printf("%d ", v[i]);
printf("\n");
Реализация – динамический массив
#include <stdio.h>
int i, n, a;
int *m;
int main(void)
{
scanf("%d",&n);
m = new int[n];
for(i = 0; i
< n; i++)
scanf("%d",&m[i]);
printf("%d",m[n-1]);
for(i = 0; i
< n - 1; i++)
printf("
%d",m[i]);
printf("\n");
delete[] m;
return 0;
}
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int m[] = new int[n];
for(int i = 0; i < n; i++)
m[i] = con.nextInt();
System.out.print(m[n-1]);
for(int i = 0; i < n - 1; i++)
System.out.print(" " + m[i]);
System.out.println();
con.close();
}
}
Python реализация
n = int(input())
v = list(map(int, input().split()))
v = v[-1:] + v[:-1]
for num in v:
print(num, end=" ")
print()