Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С++.Функция «Циклический сдвиг

Кэтэлин Негруша Ученик (65), на голосовании 2 года назад
В этой задаче от вас потребуется написать функцию shift(A, size, k), которая будет циклически сдвигать массив A размеров size элементов на k элементов вправо. В случае, если k отрицательное, массив должен сдвигаться на -k элементов влево.

С помощью данной функциии считайте массив с клавиатуры, сдвиньте на k элементов вправо и выведите на экран.

Формат входных данных

На первой строке дано одно целое число N (1 ≤ N ≤ 100) — количество элементов в массиве. В следующей строке заданы целые числа, не превосходящие 230 по абсолютной величине, — элементы массива A. В последней строке находится целое число k (|k| < N).
Формат выходных данных
Требуется вывести сдвинутый массив на экран.

входные данныевыходные данные
7
1 2 3 4 5 6 7
3

5 6 7 1 2 3 4

выходные данные

3
6 7 2
-1

7 2 6
Дополнен 2 года назад
Могу показать мой код. Но у меня частичное решение)

#include
using namespace std;

void read_data(int* data, int* n) {

cin >> *n;
for (int i = 0; i < *n; ++i)
cin >> data[i];
}

void show_data(int* data, int n) {
for (int i = 0; i < n; ++i)
cout << data[i] << " ";
}

void shift(int* data, int n, int k) {

// Сдвиг влево на k элементов эквивалентен сдвигу на n-k элементов вправо
if (k < 0) k += n;

// Копируем последние k элементов в новый массив
int tmp[100] = {};
for (int i = 0; i < k; ++i)

tmp[i] = data[n - k + i];

// Сдвигаем оставшиеся элементов на k элементов вправо
for (int i = n - k - 1; i > 0; --i)
data[i + k] = data[i];

// Восстанавливаем элементы из резервного массива в начало массива data
for (int i = 0; i < k; ++i)
data[i] = tmp[i];
}
int main() {

int data[100] = {}, n, k;
read_data(data, &n);
cin >> k;
shift(data, n, k);
show_data(data, n);
return 0;
}
Голосование за лучший ответ
Obektev Мудрец (10791) 2 года назад
Пробуй
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian"); //Для русской локализации вывода
int a[10];
int x;

int n;
cin>>n;
for (int i = 0; i < n; i++)
cin >> a[i];
int temp;
cin>>temp;
for (int j=0; j= 1; i--)
a[i] = a[i - 1];
a[0] = x; }

for (int i = 0; i < n; i++)
cout << a[i] << ' ';

return 0;
}
ObektevМудрец (10791) 2 года назад
Только без ф-ций
Obektev Мудрец (10791) Мммм. Забыл про -1
Кэтэлин НегрушаУченик (65) 2 года назад
почему?
Кэтэлин НегрушаУченик (65) 2 года назад
ещё 2 ошибки:

#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian"); //Для русской локализации вывода
int a[10];
int x;

int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
int temp;
cin >> temp;
if (temp < 0) {
for (int j = 0; j < abs(temp); j++) {

int erunda = a[0];

for (int i = 0; i <= n; i++)
a[i] = a[i + 1];
a[n - 1] = erunda;
}

for (int i = 0; i < n; i++)
cout << a[i] << ' ';
return 0;
}

for (int j = 0; j = 1; i--)
a[i] = a[i - 1];
a[0] = x;
}

{
for (int i = 0; i < n; i++)
cout << a[i] << ' ';

return 0;
}
Obektev Мудрец (10791) Мэйл ру подумал, что bits/stdc++•h - это ссылка, поэтому удалил. Это библиотека, как iostream, только включает в себя множество библиотек. Выше я скидывал скрин, как это должно выглядеть.
Krab Bark Искусственный Интеллект (283517) 2 года назад
#include "iostream"
#include "iostream"
#include "valarray"
using namespace std;
shift(int *a, int size, int k){
int j=0; valarray < int> b(a,size); b=b.cshift(-k); for(int i:b)a[j++]=i;}
int main(){
int n,k,*a; cin>>n; a=new int[n]; for(int i=0;i< n;i++)cin>>a[i]; cin>>k;
shift(a,n,k); for(int i=0;i< n;i++)cout<< a[i]<<' '; cout<< endl;}
Похожие вопросы