【发布时间】: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;
}
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。最后请edit您的问题包括您得到的实际错误。如果是构建错误,则将它们作为文本完整完整地复制粘贴到问题中。
-
在您显示的代码中可能提示 one 错误:C++ 没有variable-length arrays。请改用
std::vector。您可能也有兴趣了解std::rotate。
标签: c++ arrays segmentation-fault rotation