给定字符串,和参数n,把右循环移动n位。
例如:输入 abc n = 1 输出 bca
n = 2 输出 cab
n = 3 输出abc
思路:原地O(n)
是向左移位:从第一个元素(第0位)开始i,得到其移动到新位置j,交换,这时原来j位置的值放到第0位了,确定新位置j应该移动到的位置j,与0为值交换,做n次,n=字符总长度!
如:
abc,左移动1位时: 首先确定a的位置,在c处,交换其值,再确定c的位置,在b处,交换,再确定b的位置,在a处,交换,结束。。
也就是,每次都将要交换的值存放到a[0]中。a和c换了,下次就确定c的位置,依次执行n次。。。
代码如下:
#include<stdio.h> #include<string.h> swap(char *a,int i, int j) { char tmp; tmp=a[i]; a[i]=a[j]; a[j]=tmp; } main() { char a[100]; int i,j,k,l,n,len; scanf("%s",a); scanf("%d",&n);; len=strlen(a); i=0; for(k=0;k<len;k++){ if(i-n>=0) j=i-n; else j=len+i-n; swap(a,0,j); i=j; } printf("%s\n",a); }
时间o(n),空间o(1)