0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 22
1

Осуществить циклический сдвиг элементов массива вправо на k позиций

08.11.2015, 01:45. Показов 4890. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решаю задачи на сервере одном, задание было
"Дан массив размера N ≥ 2 и число k (0 < k < N).
Осуществить циклический сдвиг элементов массива вправо на k позиций.
Input
Первая строка стандартного потока ввода содержит количество тестовых случаев Т.
Каждый тестовый случай сосотоит из двух строк.
Первая строка содержит количество элементов массива N и число k.
Во второй строке заданы сами элементы массива – неотрицательные целые числа, не превышающие 100, разделенные пробелами. Их количество не превышает 1000.
Output
Для каждого тестового случая выведите в отдельную строку новый массив, который получается из первоначального циклическим сдвигом элементов на k позиций вправо. Элементы массива при выводе должны разделяться пробелом. После последного элемента пробела быть не должно.
Примеры
Входные данные
2
5 2
1 2 3 4 5
10 3
4 1 3 5 6 10 7 8 9 2
Результат работы
4 5 1 2 3
8 9 2 4 1 3 5 6 10 7
"

мой код верный вроде, проверял и тестил, а сервер не принимает, в чем ошибка help
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
    int T ;
    cin >> T; 
    while(T--){
        int N,k;
        cin >> N >> k;
        int a[N];     
        int M = N-k;
        int c = M;
        for(int i = 0; i < N; i++){
            cin >> a[i];
        }
        for(M; M < N; M++){
                cout << a[M] << " ";
            }
        for(int i = 0; i < c; i++){
            if(a[i]==a[c-1]){
                cout << a[i] << endl;
            }
            else{
            cout << a[i] << " ";
            }          
        }      
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2015, 01:45
Ответы с готовыми решениями:

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента
Помогите пожалуйста решить эту задачу, Дан массив размера N. Осуществить циклический сдвиг...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k-...

Осуществить циклический сдвиг массива вправо на m позиций
Разработать алгоритм и программу. Дан одномерный массив С размерностью 1хn (1&lt;=n&lt;=20). Элементы...

Циклический сдвиг элементов массива вправо на К позиций
Дан массив размера N и число К (0&lt;k&lt;5, K&lt;n) Осуществить циклический сдвиг элементов массива...

7
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
08.11.2015, 01:52 2
mGod, первое пользуйтесь тегами при вставке кода, а то читать не реально, что сервер говорит! по какому параметру не проходит код?
0
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 22
08.11.2015, 01:57  [ТС] 3
Mesteriis, пишет "не правильный ответ" выводит, а я не пойму как он может быть не правильный, тестил с разными числами всевозможными, и все ок.... и с пробелами вроде не налажал... я в замешательстве
0
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
08.11.2015, 01:57 4
Цитата Сообщение от mGod Посмотреть сообщение
не получается
Правила форума4.3 Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.

5.4 Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
C++
1
2
cin >> N >> k;
int a[N];
какой компилятор у системы? MSVS такое дело не пропустит.
0
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 22
08.11.2015, 02:01  [ТС] 5
Kerry_Jr, у меня Netbeans, а у сервера куда отправляю не знаю g++ пишет только
0
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
08.11.2015, 02:08 6
mGod,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
void shift(int *arr, int size, int k)
{
    k = k % size;
    int temp;
    while (k--)
    {
        temp = arr[size-1];
        for (int i = size-1; i > 0; --i)
            arr[i] = arr[i-1];
        arr[0] = temp;
    }
}
 
int main()
{
    int T, N, k;
    int *arr;
    std::cin >> T;
    while (T--)
    {
        std::cin >> N >> k;
        arr = new int[N];
        for (int i = 0; i < N; ++i)
            std::cin >> arr[i];
        shift(arr, N, k);
        for (int i = 0; i < N; ++i)
        {
            std::cout << arr[i];
            if (i == N-1) std::cout << std::endl;
            else std::cout << ' ';
        }
        delete[] arr;
    }
}
0
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 22
08.11.2015, 02:17  [ТС] 7
Kerry_Jr, спасибо за код, все отлично подошло, но он все равно слишком хорош для меня=( я все таки новичок и так еще не напишу, а хочется понять свои ошибки
0
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
08.11.2015, 02:39 8
mGod,
Цитата Сообщение от mGod Посмотреть сообщение
он все равно слишком хорош для меня=( я все таки новичок
Полно-те вам, сударь! Как для новичка здесь сложно только выделение и освобождение динамической памяти, остальное все есть и в вашей версии.
Цитата Сообщение от mGod Посмотреть сообщение
а хочется понять свои ошибки
как раз в выделении памяти ошибки, хотя если g++, то должен был пропустить это
C++
1
2
cin >> N >> k;
int a[N];
чтобы выделять память на стеке под массив, количество его элементов должно быть известно на этапе компиляции, а в конструкции выше размер вводится на этапе выполнения. Попробуйте выделить сразу 1000 элементов перед первым циклом, если с динамической памятью не дружите.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2015, 02:39
Помогаю со студенческими работами здесь

Осуществить сдвиг элементов массива вправо на k позиций
Всем привет , помогите пожалуйста решить эту задачу на языке Си 9. Дан целочисленный массив...

Осуществить циклический сдвиг битов в целом числе a на k позиций вправо
Осуществить циклический сдвиг битов в целом числе a на k позиций вправо.

Осуществить циклический сдвиг элементов массива влево на k позиций
Дан массив размера N и число k (0 &lt; k &lt; 5, k &lt; N). Осуществить циклический сдвиг элементов массива...

Осуществить циклический сдвиг элементов одномерного массива на k позиций
работает правильно только если k=1 если больше то сдвиг делает правильно, но когда на место их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru