ошибка при попытке вращения массива по часовой стрелке с использованием стека - PullRequest
0 голосов
/ 03 мая 2020

Учитывая несортированный массив arr [] размера N, поверните его на D элементов (по часовой стрелке).

Входные данные В первой строке входного файла содержится T, обозначающее количество тестовых случаев. Первая строка каждого теста содержит два элемента, разделенных пробелами, N обозначает размер массива и целое число D обозначает числовой размер поворота. Следующая строка будет состоять из N разделенных пробелами элементов массива

Выходные данные Для каждого тестового примера в новой строке выведите повернутый массив

Пример Входные данные 1 2 3 4 5

Выходные данные 3 4 5 1 2

#include <iostream>
#include <stack>
using namespace std;
void rotate(int *a,int s,int r) {
    stack<int> st;
    for(int i=0;i<r;i++) {
        st.push(a[i]);
    }
    for(int j=r;j<s;j++) {
        a[j-r] = a[j];
    }
    for(int k=s-1;k>r+1;k--) {
        a[k] = st.top();
        st.pop();
    }
    for(int l=0;l<s;l++) {
        cout<<a[l]<<" ";
    }
}
int main() {
    //code
    int T;
    cin>>T;
    while(T--) {
        int N,r;
        cin>>N>>r;
        int A[N];
        for(int i=0;i<N;i++) {
            cin>>A[i];
        }
        rotate(A,N,r);
        cout<<endl;
    }
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

извините, мой плохой, int третий для l oop в функции поворота должно быть k> sr-1

0 голосов
/ 03 мая 2020

Я следовал вашему логику c, похоже, что проблема в вашей засыпке.

    for(int k=s-1;k>=s-r;k--) { // change k>r+1 to k>=s-r
        a[k] = st.top();
        st.pop();
    }
...