题目
翻译
题目
课间休息时,
n
n
n个学生在食堂排队。最初他们按着顺序进入食堂,但过了一会,男孩们开始觉得站在女生前面很尴尬,于是他们开始每秒让女生往前走。
让我们更精确地描述这一过程。假设队列中的位置按从1到n的整数顺序编号。在位置1的人最先被服务。如果在
x
x
x时刻,男孩站在第
i
i
i位置,而女孩站在第
i
+
1
i+1
i+1位置,那么
x
+
1
x+1
x+1时刻,女孩会在第
i
i
i位置,而男孩则在第
i
+
1
i+1
i+1位置。时间按秒计算。
你会知道一开始孩子们位置,请确定一下
t
t
t时刻后队伍的情况。
输入
第一行为2个整数
n
n
n和
t
t
t(1 ≤
n
n
n,
t
t
t ≤ 50 ),表示队伍中孩子们的数量以及你需要确认的多少时间后的队伍移动情况的时间。
下一行为一个字符串
s
s
s,表示一开始的队伍情况。如果第
i
i
i个位置为男孩,则
s
s
s中第
i
i
i个字符为“B”,反之为“G”。
输出
输入
输出经过 t t t时刻后以字符串 a a a表示的队伍情况。如果在所需时间之后第 i i i个位置为男孩,则 a a a中第 i i i个字符必须等于“ B ”,否则必须等于“ G ”。
分析
分析题意可知就是循环t次,每次遍历一次字符数组,找到“BG”,替换成“GB”,需要注意的是,如果找到了则应将指向字符的变量+1,例如,BGG,如果不+1的话,则第一次循环就会变成GGB,而这结果应该是第二次循环后出现。
代码
#include<iostream>
using namespace std;
int main()
{
int n, t;
char s[51];
cin >> n >> t>>s;
while (t--)
{
for (int i = 0; i < n - 1; i++)
{
if (s[i] == 'B' && s[i + 1] == 'G')
{
s[i] = 'G';
s[i + 1] = 'B';
i++;
}
}
}
cout << s;
return 0;
}