题目:将长度为N的任意字符串向左旋转i个位置.
举例:1. 长度为8的字符串abcdefgh向左旋转3个位置后变为 defghabc
2. 长度为8的字符串123456向左旋转4个位置后变为 561234
解法一:海豚算法:
关键:1.求最大公约数 2.取模
int gcd(int a, int b)
{
int temp;
if(a < b){
temp = a;
a = b;
b = temp;
}
while(b!=0){
temp = a%b;
a = b;
b = temp;
}
return a;
}
void Shifting(char * a, int rotdistance, int len)
{
int i, j;
int temp;
int igcd = gcd(rotdistance, len);
for(i = 0; i < igcd; i++){
j = i;
temp = a[i];
for(;;){
int k = (j+rotdistance)%len;
if(k == i){
break;
}
a[j] = a[k];
j = k;
}
a[j] = temp;
}
}