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