在给定时间内用 C++ 查找队列的排列
在此问题中,我们给定一个仅包含字符 'M' 和 'F' 的字符串和时间 t。我们的任务是找出队列在给定时间内的排列。
该字符串定义了排队进站的队列。如果队列中的所有男性在任何时间点看到女性在他们后面,他们会与女性交换位置。在进站前还有一单位时间,并且每次交换需要一单位时间。我们需要在公共汽车到达时重新排列队列,并找出位置。
我们以一个例子来说明这个问题,
Input : queue = "MFMMFF" , t = 3 Output : FFMFMM
说明 -
In T = 0 -> 1, 'M' at position 1 changes position with 'W' at 2 and 'M' at position 4 changes position with 'W' at 5. Queue becomes - "FMMFMF". In T = 0 -> 1, 'M' at position 3 changes position with 'W' at 4 and 'M' at position 5 changes position with 'W' at 6. Queue becomes - "FMFMFM". In T = 0 -> 1, 'M' at position 2 changes position with 'W' at 3 and 'M' at position 4 changes position with 'W' at 5. Queue becomes - "FFMFMM".
解决方案方法
解决此问题的简单方法是遍历表示队列的字符串 T 次。找出 "MF" 对的出现然后交换 M 和 F 的位置。最后返回最终字符串。
示例
说明我们解决方案的工作原理的程序
#include <iostream> using namespace std; string rearrageQueue(int n, int t, string queue) { for (int i = 0; i < t; i++) for (int j = 0; j < n - 1; j++) if (queue[j] == 'M' && queue[j + 1] == 'F') { queue[j] = 'F'; queue[j + 1] = 'M'; j++; } return queue; } int main() { int n = 6, t = 3; string queue = "MFMMFF"; cout<<"The queue after time is over : "<<rearrageQueue(n, t, queue); return 0; }
输出
The queue after time is over : FFMFMM
广告