Матч 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;

  }

};