#include <iostream>
using namespace std;
void arshift(int *a, int size, int sh) {
for (int i = 0; i < sh % size; ++i) {
int tmp = a[0];
for (int j = 1; j < size; ++j) {
a[j - 1] = a[j];
}
a[5] = tmp;
}
}
/*
// более оптимальный вариант с выделением дополнительной памяти,
// который тоже можно значительно улучшить, но не буду
void arshift(int *a, int size, int sh) {
sh = sh % size;
if (sh != 0) {
int *tmp = new int[sh];
for (int c = 0; c < sh; ++c) tmp[c] = a[c];
for (int c = 0; c < size - sh; ++c) a[c] = a[c + sh];
for (int c = 0; c < sh; ++c) a[size - sh + c] = tmp[c];
delete [] tmp;
}
}
*/
int main() {
cout << "array: ";
int a[] = { 1, 2, 3, 4, 5, 6 };
for (int j = 0; j < 6; ++j) cout << ' ' << a[j];
cout << "\nk? ";
int k;
cin >> k;
arshift(a, 6, k);
cout << "result:";
for (int j = 0; j < 6; ++j) cout << ' ' << a[j];
return 0;
}
Другие языки программирования и технологии
Помогите пожалуйста написать программу на c++. Циклически сдвинуть массив на k элементов влево.
проверь почту
#include <iostream>
#include <locale>
#include <iterator>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
#define FROM -10
#define TO 10
struct R
{
int operator()() const
{
return rand() % (TO - FROM + 1) + FROM;// -10..10
}
};
template < typename FwdIterator >
void array_rotate(FwdIterator begin, FwdIterator end, ptrdiff_t K)
{
std::rotate(begin, begin + K, end);
}
}
int main()
{
setlocale(LC_ALL, "");
srand((unsigned) time(NULL));
int arr[10];
std::generate_n(arr, sizeof(arr) / sizeof(arr[0]), R());
typedef std::ostream_iterator< int > O;
std::cout << "Array: ";
std::copy(arr, arr + sizeof(arr) / sizeof(arr[0]), O(std::cout, " "));
std::cout << std::endl;
std::cout << "Rotate step (positive for left, negative for right): ";
ptrdiff_t K;
std::cin >> K;
K %= static_cast<ptrdiff_t>(sizeof(arr) / sizeof(arr[0]));
if (K < 0)
K += sizeof(arr) / sizeof(arr[0]);
array_rotate(arr, arr + sizeof(arr) / sizeof(arr[0]), K);
std::cout << "Rotated(" << K << "): ";
std::copy(arr, arr + sizeof(arr) / sizeof(arr[0]), O(std::cout, " "));
std::cout << std::endl;
return 0;
}
#include <locale>
#include <iterator>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
#define FROM -10
#define TO 10
struct R
{
int operator()() const
{
return rand() % (TO - FROM + 1) + FROM;// -10..10
}
};
template < typename FwdIterator >
void array_rotate(FwdIterator begin, FwdIterator end, ptrdiff_t K)
{
std::rotate(begin, begin + K, end);
}
}
int main()
{
setlocale(LC_ALL, "");
srand((unsigned) time(NULL));
int arr[10];
std::generate_n(arr, sizeof(arr) / sizeof(arr[0]), R());
typedef std::ostream_iterator< int > O;
std::cout << "Array: ";
std::copy(arr, arr + sizeof(arr) / sizeof(arr[0]), O(std::cout, " "));
std::cout << std::endl;
std::cout << "Rotate step (positive for left, negative for right): ";
ptrdiff_t K;
std::cin >> K;
K %= static_cast<ptrdiff_t>(sizeof(arr) / sizeof(arr[0]));
if (K < 0)
K += sizeof(arr) / sizeof(arr[0]);
array_rotate(arr, arr + sizeof(arr) / sizeof(arr[0]), K);
std::cout << "Rotated(" << K << "): ";
std::copy(arr, arr + sizeof(arr) / sizeof(arr[0]), O(std::cout, " "));
std::cout << std::endl;
return 0;
}
Похожие вопросы
- Помогите пожалуйста написать программу на c++. Упорядочить элементы одномерного массива по убыванию.
- Привет всем! Помогите, пожалуйста, написать программу в C++.
- Помогите пожалуйста написать программу на c++.
- Помогите, пожалуйста, написать программу на C++.
- Помогите пожалуйста написать программу на C#
- Помогите пожалуйста написать программу на c++, или хотя бы скиньте ссылку, если не сложно, где можно найти.
- Помогите пожалуйста написать программу в Паскале )) Написать программу для вычисления суммы в массиве из 10 элементов
- Помогите пожалуйста написать программу: Найти сумму индексов четных элементов массива. На языке С++.
- Помогите пожалуйста написать программу в с++
- Народ, помогите пожалуйста с программой в C#