题目描述
小c才开始学习c语言,让他最烦恼的就是对字符数组的操作。小C的好朋友小E为了激励他,出了这样一个题目:字符串的移动输出。并给他许诺说,如果他能够在有限的时间内编写出这道题目的代码,并顺利通过就请他去吃大餐,于是小C便认真的敲这个题目的代码去了,聪明的你也来练练手吧。
输入
第一行包括一个整数t,代表有t组数据;
每组数据第一行包括一个整数m(1<=m<=50),第二行有m个小写英文字符,第三行包括一个整数n(0<=n<=100),代表字符串向左移动n位。
输出
每组数据输入站一行,即输出移动后的字符串。
样例输入
3
5
asdfk
0
5
asdfk
1
5
asdfk
6
样例输出
asdfk
sdfka
sdfka
分析:本体类似于约瑟夫环问题,其本质还是队列问题,每次队列首元素出列再放回队列尾即可。
#include<stdio.h>
#include<queue>
using namespace std;
typedef long long ll;
ll i,j,k,x,n,t;
const int M=1e2+5;
char str[M],s;
int main()
{
scanf("%d",&x);//输入测试次数
while(x--)
{
queue<char>q;//定义一个队列
scanf("%d",&n);
scanf("%s",str);//输入字符串
for(i=0;i<n;i++)//将字符串中所有字符,依次放入队列中
q.push(str[i]);
scanf("%d",&t);//输入操作次数
for(i=1;i<=t;i++)//每次将队列首元素弹出再放回队尾
{
s=q.front();
q.pop();
q.push(s);
}
for(i=0;i<n;i++)//输出时依次将首元素弹出直接输出即可
{
s=q.front();
q.pop();
printf("%c",s);
}
printf("\n");
}
}