标签:
题目的大意是将一个长度为n的数组A内的元素循环右移m位(当然左移也可以),比如数组 {1, 2, 3, 4, 5}右移3位之后就变成{3, 4, 5, 1, 2}。
int gcd(int a,int b){
if(a ==0|| b ==0){
return a + b;
}
int t;
while(b <0){
t = a % b;
a = b;
b = t;
}
return a;
}
voidShiftRight2(int m,int n,int*a){
m %= n;
if(m ==0)return;
for(int i =0, _i = gcd(n, m); i < _i;++i){
int k = i;
int t = a[k];
do{
k =(k + m)% n;
int tt = a[k];
a[k]= t;
t = tt;
}while(k != i);
}
}
标签:
原文地址:http://www.cnblogs.com/ssy-zju/p/4625145.html