第一种普遍方式
思路:
把后面折下来单独放到旁边,把前面的往后放腾出位置,最后把折下来的放到前面
#include<iostream>
using namespace std;
int main(){
int a[100];
int n,k;
cin >> n >> k; //输入一共几个数,要旋转几次
for(int i = 0;i<n;i++) cin >> a[i];//输入数组
while(k--){ //循环k次
int t = a[n-1]; //把最后一个数存下来
for(int i=n-2;i>=0;i--) //从倒数第二个数开始
a[i+1] = a[i]; //把前一个数放到这个格子里
a[0] = t; //循环完把之前最后面的数放到最前面
}
for(int i = 0;i<n;i++) cout << a[i] << ' ';//循环输出
return 0;
}
第二种取巧方式
思路:1.翻转a[ ]; 2.翻转前半部分 3.翻转后半部分
例子 1 2 3 4 5 —(1)> 5 4 3 2 1 —(2)> 4 5 3 2 1 —(3)>4 5 1 2 3
reverse调换函数
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[100];
int n,k;
cin >> n >> k; //输入一共几个数,要旋转几次
for(int i = 0;i<n;i++) cin >> a[i];//输入数组
reverse(a,a+n);
reverse(a,a+k);
reverse(a+k,a+n);
for(int i = 0;i<n;i++) cout << a[i] << ' ';//循环输出
return 0;
}
2021年8月14日08点00分
怎么理解reverse(a+k,a+n);啊,不应该是reverse(a+k+1,a+n);吗