题目
答案
#include
#include
using namespace std;void Swap(int a[],int left ,int right)
{for(int i&#61;left;i<&#61;(left&#43;right)/2;i&#43;&#43;)swap(a[i],a[left&#43;right-i]);
}int main()
{int n,m;scanf("%d %d",&n,&m);int a[n],i;for(i&#61;0;i<n;i&#43;&#43;)scanf("%d",&a[i]);m&#61;m%n;if(m&#61;&#61;0||n&#61;&#61;m){printf("%d",a[0]);for(i&#61;1;i<n;i&#43;&#43;)printf(" %d",a[i]);return 0;}Swap(a,0,n-1);Swap(a,0,n-1-m);Swap(a,n-m,n-1);printf("%d",a[0]);for(i&#61;1;i<n;i&#43;&#43;)printf(" %d",a[i]);
}
PTA测试点
注意
Swap函数中的判断条件i<&#61;(left&#43;right)/2
里的&#61;
要记得写
算法分析
本题只需进行三次交换就可以实现数组的循环左移
我们将题目中的m换为5&#xff0c;进行举例说明&#xff08;其它情况同理&#xff0c;m>n/2也算是一种特殊情况&#xff09;
8 5
1 2 3 4 5 6 7 8
交换过程如下&#xff08;黑色数字表示不动&#xff0c;红色数字表示交换的数字&#xff09;
就这么简单&#xff01;觉得还不错的同学可以点上一个宝贵的赞&#xff0c;谢谢大家&#xff01;