1.题目:
Problem Description
对于一个给定的字符型数组循环左移i位,要求尽量不申请空间,实现“原地”操作。
Input
输入的第一行为一个数字n,代表接下来有n组数据,每组数据包括2行;每组数据中的第一行为一个字符串(长度不超过50),第二行为一个数字m,代表要左移的位数。
Output
循环左移后的字符型数组内容。
Sample Input
1
abcdefgh
3
Sample Output
defghabc
2.参考代码:
代码一:
#include <iostream>
using namespace std;
void Reverse(char* a,int head,int rear){
int i,j;
char t;
i=head;
j=rear;
while(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}
void Converse(char* a,int n,int i){
Reverse(a,0,i-1);
Reverse(a,i,n-1);
Reverse(a,0,n-1);
}
int main()
{
int n,i;
char a[200];
cin>>n;
while(n--)
{
cin>>a>>i;
i=i%strlen(a);
Converse(a,strlen(a),i);
cout<<a<<endl;
}
return 0;
}
代码二:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n,x,i,len;
char s[200];
cin>>n;
while(n--)
{
cin>>s>>x;
len=strlen(s);
x=x%len;
for(i=x;i<len;i++)
cout<<s[i];
for(i=0;i<x;i++)
cout<<s[i];
cout<<endl;
}
return 0;
}