Move!Move!!Move!!! 灰太狼 2022-03-20 03:28 190阅读 0赞 **何海涛:《剑指Offer:名企面试官精讲典型编程题》:九度OJ** 题目描述: [http://ac.jobdu.com/problem.php?cid=1039&pid=26][http_ac.jobdu.com_problem.php_cid_1039_pid_26] 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! **输入:** 多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。 **输出:** 对应每个测试案例,输出新序列。 **样例输入:** UDBOJ 4 abba 1 **样例输出:** JUDBO bbaa 思想:类似于上一篇:http://blog.csdn.net/shanshanpt/article/details/8689935 例如: 输入 123456789 需要左移3位 将左右分开(以3位为分界线),分别翻转 321 987654 再将整体翻转 456789 321 OK! 代码AC: #include <stdio.h> #include <string.h> int main() { char str[1002], ch; int i, k, low, high; while( scanf("%s %d", str, &k) != EOF ) { getchar(); k = k % ( strlen( str ) ); // 必不可少!(当长度很大的时候会出现循环,所以先%) low = 0; high = k - 1; while( low < high ) { ch = str[low]; str[low] = str[high]; str[high] = ch; low++; high--; } low = k; high = strlen( str ) - 1; while( high > low ) { ch = str[low]; str[low] = str[high]; str[high] = ch; low++; high--; } low = 0; high = strlen( str ) - 1; while( high > low ) { ch = str[low]; str[low] = str[high]; str[high] = ch; low++; high--; } puts( str ); /* for( i = strlen( str ) - 1; i >= 0; i-- ) { printf("%c", str[i]); } printf("\n");*/ } return 0; } [http_ac.jobdu.com_problem.php_cid_1039_pid_26]: http://ac.jobdu.com/problem.php?cid=1039&pid=26
还没有评论,来说两句吧...