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 ≤ in – 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 ≤ in – 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()