NYOJ 658 字符串右移

来源:互联网 发布:淘宝电脑主机便宜 编辑:程序博客网 时间:2024/05/20 14:23

字符串右移

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
LZQ最近迷上了字符串,于是他有一个问题想考你,聪明的你一定知道答案。问题如下:给你一个字符串,让你对其进行向右移动K次,输出新的字符串。
输入
输入数据有多组,每组有一个字符串STR与一个数字K,表示对字符串STR向右移动K位。
输出
输出新的字符串STR1.
样例输入
abcd1234 4sdfe123f 10
样例输出
1234abcd3fsdfe12
来源
原创
上传者

ACM_林志强

#include<stdio.h>
#include<string.h>
int main()
{
char str[1000];
int n;
while(scanf("%s %d",str,&n)!=EOF)
{
int len=strlen(str);
n=n%len;
for(int i=0;i<n;i++)
{
for(int j=len-1;j>=0;j--)
{
char t=str[j];
str[j+1]=t;
}
str[0]=str[len];
}
for(int i=0;i<len;i++)
printf("%c",str[i]);
printf("\n");
}
return 0;
 } 

时间复杂度有点高,看了大佬的代码,觉得大佬就是大佬,不过这道题也说明了想问题可以深入些,有的时候可以直接用推理出来的结果,不用把模拟过程也让电脑实现

下边是大佬的代码

#include<stdio.h>
#include<string.h>
int main()
{
char str[1000];
int n;
while(scanf("%s %d",str,&n)!=EOF)
{
int len=strlen(str);
n=n%len;//移动一个字符串长度该字符串顺序不变 
for(int i=len-n;i<len;i++)
printf("%c",str[i]);
for(int i=0;i<len-n;i++)
printf("%c",str[i]);
printf("\n");
}
return 0;
}