在给定时间内用 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

更新于: 2022-01-27

164 浏览

提升你的 职业生涯

完成课程以获得认证

开始
广告