Другие языки программирования и технологии

Помогите написать программу на с++ Циклический сдвиг элементов массива вправо Массив 20 элементов, random

#include <iostream>
#include <random>
using namespace std;
template<typename Type>
void shift_right(Type* seq, const size_t size) {
if (size == 1) return;
if (size == 2) {
swap(seq[0], seq[1]);
return;
}
const Type tmp = seq[size - 1];
for (auto i = size - 2; i < size; --i) seq[i + 1] = seq[i];
seq[0] = tmp;
}
template<typename Type>
void shift_right(Type* seq, const size_t size, const size_t quant) {
for (auto i = 0u; i < quant; ++i) shift_right(seq, size);
}
template<typename Type>
void show(Type* seq, const size_t size) {
for (auto i = 0u; i < size; ++i) cout << ' ' << seq[i];
cout.put('\n');
}
int main() {
const size_t size = 20;
int arr[size];
const uniform_int_distribution<> uid(10, 99);
random_device rd;
mt19937 gen(rd());
for (auto &pos : arr) pos = uid(gen);
show(arr, size);
shift_right(arr, size); // на один вправо
show(arr, size);
shift_right(arr, size, 5); // ещё на пять вправо
show(arr, size);
system("pause");
}
Sergej Malkevich
Sergej Malkevich
53 749
Лучший ответ
while (sh_cnt--) { // сдвиг на sh_cnt позиций
int t = arr[19];
for (int i = 19; i > 0; i--) arr[i] = arr[i - 1];
arr[0] = t;
}
#include < iostream >
#include < iomanip >
#include < cstdlib >
#include < ctime >
#include < vector >
#include < algorithm >

using namespace std;

void main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
cout << "Введите число элементов в массиве ";
unsigned n;
cin >> n;
vector < int > v(n);
cout << "Исходный массив" << endl;
generate(v.begin(), v.end(), []() {return -50 + rand() % 101; });
for_each(v.begin(), v.end(), [](int t) {cout << setw(4) << t; });
int t = v[n - 1];
v.erase(v.end() - 1);
v.insert(v.begin(), t);
cout << "\nПреобразованный массив" << endl;
for_each(v.begin(), v.end(), [](int t) {cout << setw(4) << t; });
cin.get(); cin.get();
}

Похожие вопросы