2019独角兽企业重金招聘Python工程师标准>>>
由于再次看到之前自己分享的 关于 <编程珠玑> 里 向量旋转(旋转交换)的相关代码. 发现无人关注. 网络上搜索相关 实现代码,发现 又长又晦涩. 不易理解. 这里对之前的分享重新修改,最主要区别是,不计算最小公倍数,改用记录移动次数作为循环结束点.力求简单明了.希望有相关学习的同学发表自己的看法.
/*转载请注明出处.*/
#include
#include
#include
void f(char*,int);
int main(int argc, char *argv[]) {
char *a; /* 被操作的字符串 */
int step; /* 移位位置 */
if(argc < 3) {
printf("%s%s%s\n", "usage: ", argv[0], " string number\n");
return -1;
}
a = argv[1];
step = atoi(argv[2]);
f(a,step);
printf("%s\n", a);
}
void f(char *a, int step){
int i=0, j=0;
int n; /* 字符串长度 */
int tmp; /* 临时存储区域 */
int movenum = 0; /* 总共移动次数 */
n = strlen(a) / sizeof(char);
step = step % n;
if(!step) return;
while(movenum < n) {
tmp = a[i];
j = i;
while(((j+step)%n) != i) {
a[j] = a[((j+step)%n)];
movenum++;
j = ((j+step)%n);
}
a[j] = tmp;
movenum++;
i++;
}
//printf("strlen: %d step: %d move: %d\n", n, step, movenum);
}
编码,学习, 都是辛苦活, 写文章,发共享,没人发工资. 请转载的朋友注明出处. 不要做伸手党.