Матч
47, Тасование карт (CardsShuffle)
Строка cards содержит набор карт.
Тасованием карт называется последовательное выполнение следующей обменной
операции: последовательность карт, находящаяся между индексами first и last включительно, изымается из колоды и ставится в ее начало.
Индексы first и last начинаются с 1. Относительный порядок переставляемых карт не
меняется. Например, для слова “ABCDEFG”, first = 2, last = 4 после выполнения одной обменной операции получим
последовательность “BCDAEFG”. Необходимо
произвести над исходной колодой times
обменных операций и вернуть ее состояние.
Класс: CardsShuffle
Метод: string
shuffle(string cards, int first, int last,
int times)
Ограничения: cards содержит от 1 до 50 строк из букв
латинского алфавита ‘A’ – ‘Z’, 1 £ first £ n (n –
количество карт, размер массива cards), first £ last £ n, 1 £ times £ 100.
Вход. Массив строк cards, описывающий положение карт в колоде, индексы обменной
операции first и last, количество проводимых обменных операций times.
Выход. Состояние колоды карт после выполнения times обменных операций.
Пример входа
cards |
first |
last |
times |
“NW” |
2 |
2 |
9 |
"KYHID" |
3 |
5 |
8 |
"KMCOQHNWNKU" |
9 |
10 |
9 |
Пример выхода
"WN"
"YHIDK"
"COQHNWNKKMU"
РЕШЕНИЕ
обработка строк
Используя строковые операции,
моделируем обменную операцию. Производим ее в цикле times раз.
ПРОГРАММА
#include <cstdio>
#include <string>
using namespace std;
class CardsShuffle
{
public:
string shuffle(string cards, int first, int last, int times)
{
while(times--)
cards = cards.substr(first-1,last-first+1) + cards.substr(0,first-1) +
cards.substr(last);
return cards;
}
};