在给定时间内用 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 的位置。最后返回最终字符串。

示例

说明我们解决方案的工作原理的程序

Open Compiler
#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; }

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

The queue after time is over : FFMFMM

更新于: 2022-01-27

164 浏览

提升你的 职业生涯

完成课程以获得认证

开始
广告