关于数组旋转
方法一:可以考虑取模运算
例如二维数组移动,一维数组旋转等
下面题目:
n个数据顺时针旋转k次
只需要输入时
cin>>arr[(i+k)%n]
即可
同理二维数组的移动都可以运用这个思想
代码:
`#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int arr[n];
for(int i = 0 ; i < n ; i ++)
{
cin>>arr[(i+k)%n];
}
for(int i = 0 ; i < n ; i ++)
{
cout<<arr[i]<<endl;
}
return 0;
}`
方法二:
采用翻转
画图思想
首先明确reverse(first,last)函数中左闭右开[);
——————————————————----
首先将末尾放到前面reverse
----——————————————
再将----reverse()前k个
再将——————————————reverse()k到n个;
代码:
`#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
int arr[n];
for(int i = 0 ; i < n ; i ++)
{
cin>>arr[i];
}
reverse(arr, arr + n);
reverse(arr, arr + k);
reverse(arr + k, arr + n);
for(int i = 0; i < n; i ++) cout<<arr[i]<<endl;
return 0;
}`