void Rotate(char* a,int len)
{
int i;
char temp;
for(i=0;i<(len+1)/2;i++)
{
temp = *(a+i);
*(a+i) = *(a+len-i);
*(a+len-i) = temp;
}
}
int main(int argc, char *argv[])
{
int k;
printf("Please input number:");
scanf("%d",&k);
char a[6] = {‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};
int i;
k = k%6;
Rotate(a,6);
Rotate(a,k);
Rotate(a+k,6-k);
for(i=0;i<6;i++)
printf("%c",*(a+i));
system("PAUSE");
return 0;
}
其中有2个地方要注意
1.for(i=0;i<(len+1)/2;i++),正好可以避开奇数和偶数的判断,大家自己琢磨一下。
2.k = k%6;k的次数有可能大于6,,6的整数倍的右移还是本身,于是就求余吧。
其实这道题目一个元素的附加存储空间都可以省去,因为交换两个值不需要附加空间,我们有^.
如下:
void swap(char& a,char& b)
{
a = a^b;
b = a^b;
a = a^b;
}
这里用到了引用。大家推导一下,因为a^a = 0和a^0 = a。如果用指针的话,如下:
void swap(char* a,char* b)
{
*a = *a^*b;
*b = *a^*b;
*a = *a^*b;
}
via:http://blog.sina.com.cn/s/blog_9e62a28b0101jqcv.html