【问题标题】:getting error while trying to rotate array clock wise using stack尝试使用堆栈顺时针旋转数组时出错
【发布时间】:2020-08-17 14:09:52
【问题描述】:

给定一个大小为 N 的未排序数组 arr[],将其旋转 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;
}

【问题讨论】:

标签: c++ arrays segmentation-fault rotation


【解决方案1】:

我按照你的逻辑,你的回填部分好像有问题。

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

【讨论】:

    【解决方案2】:

    对不起,旋转函数中的 int 第三个 for 循环应该是 k>s-r-1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2012-05-16
      • 2012-05-09
      • 2018-04-01
      • 1970-01-01
      • 2012-03-15
      相关资源
      最近更新 更多