https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808
3.9改进版本
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n, m, p;
cin >> n >> m;
int num[n];
for(int i=0; i<n; i++){
cin >> num[i];
}
m = m % n;
p = n - m;
reverse(num, num+p);
reverse(num+p, num+n);
reverse(num, num+n);
for(int i=0; i<n; i++){
cout << num[i];
if(i<n-1)
cout << " ";
}
return 0;
}
原版
题意是,给定一个数组,要求循环向右移动n个数。这题在考研数据结构里面遇到过,
如这样的数组:1、2、3、4、5、6,
向右移动两位:5、6、1、2、3、4,
可以把它看成这样的过程:分别把1、2、3、4逆序,把5、6逆序,
数组变成这样:4、3、2、1、6、5,再把整个数组逆序,
数组变成这样:5、6、1、2、3、4,就是最后的答案。
#include<iostream>
using namespace std;
// 逆序
void reverse(int num[], int from, int to){
int temp;
for(int i=from,j=to; i<j; i++,j--){
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
int main(){
int len, move;
cin >> len;
cin >> move;
move %= len;
int num[len];
for(int i=0; i<len; i++){
cin >> num[i];
}
reverse(num, 0, len-move-1);
reverse(num, len-move, len-1);
for(int i=len-1; i>=0; i--){
cout << num[i];
if(i!=0)
cout << " ";
}
return 0;
}