C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で特定の時間のキューの配置を見つけます


この問題では、文字「M」と「F」のみで構成される文字列と時間tが与えられます。私たちのタスクは、特定の時間にキューの配置を見つけることです。 。

文字列は、バスに乗るために共通のキューに立っている人々を定義します。待ち行列にいるすべての男性は非常に騎士道的であるため、いつでも後ろに女性がいるのを見ると、彼らは彼らと場所を交換します。バスに入るのにt単位時間が残っており、各交換には1単位時間がかかります。キューを並べ替えて、バスが来るときの位置を見つける必要があります。

問題を理解するために例を見てみましょう

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

  1. 指定されたイテレータのタイプを見つけるためのC++プログラム

    イテレータは、コンテナの要素を反復処理するために使用されるポインタのようなオブジェクトです。イテレータを使用する主な利点は、共通のインターフェースを作成し、アルゴリズムを実装に使用されるコンテナのタイプに影響されないようにすることです。 C ++標準ライブラリには、イテレータのタイプがあります- フォワードイテレータ 双方向イテレータ 入力イテレータ 出力イテレータ ランダムアクセスイテレータ プログラムは、上記のイテレータのどれがデータ構造によって使用されているかをチェックすることです。 使用するイテレータのタイプを決定するのに役立つ可能性のあるいくつかの要因があります。

  2. 与えられた文字列の順列の数を見つけるためのC++プログラム

    文字列の文字をさまざまな順序で並べることができます。ここでは、特定の文字列から形成できる順列の数をカウントする方法を説明します。 1つの文字列が「abc」の場合はわかります。 3つの文字があります。 3つにアレンジできます! =6つの異なる方法。したがって、n文字の文字列は、nに配置できます。違う方法。しかし、aabのように同じ文字が複数回存在する場合、6つの順列はありません。 aba aab baa baa aab aba ここで、(1,6)、(2、5)、(3,4)は同じです。したがって、ここでは順列の数は3です。これは基本的に(n!)/(複数回発生しているす