数组元素循环右移问题
输入样例:
6 2
1 2 3 4 5 6
结尾无空行
输出样例:
5 6 1 2 3 4
结尾无空行
思路:
这可能更是一道考验输出的题目,在一个数组中完成相应的循环右移过于困难,但是如果我们将这道题看成一道输出格式的题目就迎刃而解了。
为了学着用堆栈,故意给自己增加麻烦,使用堆栈进行输出。
代码如下
#include<iostream>
#include<stack>
using namespace std;
int main() {
int n, shift;
cin >> n >> shift;
int a[101];
stack<int> a1;
stack<int> b;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
if (shift <= n) {
for (int i = n - shift - 1; i >= 0; i--) {
a1.push(a[i]);
}
for (int j = n - 1; j > n - shift - 1; j--) {
b.push(a[j]);
}
}
else {
shift %= n;
for (int i = n - shift - 1; i >= 0; i--) {
a1.push(a[i]);
}
for (int j = n - 1; j > n - shift - 1; j--) {
b.push(a[j]);
}
}
while (!b.empty()) {
cout << b.top() << " ";
b.pop();
}
while (!a1.empty()) {
cout << a1.top();
a1.pop();
if (!a1.empty()) {
cout << " ";
}
}
}