Другие языки программирования и технологии

Вопрос по олимпиаде по информатике!! Помогите плиз

В очереди стоят мальчики и девочки. В начале каждой минуты, если за каким-то мальчиком стоит девочка, то он меняется с ней местами, пропуская ее вперед (при этом общее количество ребят в очереди не меняется).
Вам дана очередь в виде последовательности букв M и D (начало очереди слева), определите, как она будет выглядеть через 10 минут.
MMDMDDDDDMMDDDMDDDMD
В качестве ответа выведите строку из заглавных латинских букв M и D (не разделяя их пробелами).
0 = MMDMDDDDDMMDDDMDDDMD
1 = MDMDMDDDDMDMDDDMDDDM
2 = DMDMDMDDDDMDMDDDMDDM
3 = DDMDMDMDDDDMDMDDDMDM
4 = DDDMDMDMDDDDMDMDDDMM
5 = DDDDMDMDMDDDDMDMDDMM
6 = DDDDDMDMDMDDDDMDMDMM
7 = DDDDDDMDMDMDDDDMDMMM
8 = DDDDDDDMDMDMDDDDMMMM
9 = DDDDDDDDMDMDMDDDMMMM
10 = DDDDDDDDDMDMDMDDMMMM

Const s = "MMDMDDDDDMMDDDMDDDMD"
Dim m(1 To Len(s)) As String
For i = 1 To Len(s)
m(i) = Mid(s, i, 1)
Next i
For i = 0 To 10
Debug.Print i & " = " & Join(m, "")
For j = 1 To Len(s) - 1
If m(j) = "M" And m(j + 1) = "D" Then m(j) = "D": m(j + 1) = "M": j = j + 1
Next j
Next i
Денис Панарин
Денис Панарин
11 046
Лучший ответ
Это задача на сортировку пузырьком, с той модификацией, что в случае обмена надо скакнуть на шаг вперед, и сортировка не полная, а строго 10 итераций. Помогло?
Алексей Мельчаков мне решение надо
#include
#include
using namespace std;

int main()
{
string Queue;
cin >> Queue;
for (int i = 0; i < 10; i++)
{
for (int x = 0; x < Queue.length() - 1; x++)
{
//Если текущая буква = M и следующая = D то меняем их местами и перепрыгиваем на итерацию вперёд
if (Queue[x] == 'M') if (Queue[x + 1] == 'D') {
swap(Queue[x], Queue[x + 1]); x++;
}
}
}
cout << Queue << endl;
system("pause");
}
Кирилл Жилин
Кирилл Жилин
3 378