Матч 237, Карты (Cards)

Дивизион 2, Уровень 1

 

Необходимо раздать колоду карт игрокам. Каждая карта имеет единственную характеристику – число от 0 до 9. Сдача карт идет по кругу по одной последовательно от нулевого игрока до (numPlayers – 1) - го. Каждый игрок должен получить одинаковое количество карт. Если все карты раздать нельзя при таком условии, то следует остановить раздачу на (numPlayers – 1) - ом игроке. При этом в колоде должно остаться не розданными не более numPlayers карт.

 

Класс: Cards

Метод: vector<string> deal(int numPlayers, string deck)

Ограничения: 1 numPlayers 50, deck содержит от 0 до 50 символов ‘0’ – ‘9’.

 

Вход. Количество игроков numPlayers и строка deck, описывающая колоду карт .

 

Выход. Массив, содержащий numPlayers строк – набор карт, доставшихся каждому игроку.

 

Пример входа

numPlayers

deck

6

“012345012345012345”

4

“111122223333”

6

“01234”

 

Пример выхода

{"000", "111", "222", "333", "444", "555"}

{"123", "123", "123", "123"}

{"", "", "", "", "", ""}

 

 

РЕШЕНИЕ

обработка строк

 

Заведем массив res, состоящий из numPlayers пустых строк. Проходим по строке deck и каждую очередную i - ую карту сдаем (i % numPlayers) - ому игроку. Чтобы каждый игрок получил одинаковое число карт, следует раздать deck.size() - deck.size() % numPlayers карт.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

using namespace std;

 

class Cards

{

public:

  vector<string> deal(int numPlayers, string deck)

  {

    vector<string> res(numPlayers,"");

    for(int i = 0; i < deck.size() - deck.size() % numPlayers; i++)

      res[i % numPlayers] += deck[i];

    return res;

  }

};