Матч
257, Очки в бридже (BridgePts)
Дивизион 2, Уровень
2
Колода состоит из 52 карт, каждая
из которых имеет масть (креста, бубна, черва,
пика) и значение (туз, 2, 3, …, 10, валет, дама, король). При игре в бридж
игроку сдаются 13 карт, после чего происходит подсчет очков: за каждый туз
дается 4 очка, за каждого короля – 3, за даму – 2, за вальта – 1 очко. Для
каждой масти прибавляется 1 очко, если имеется в точности 2 карты этой масти, 2
очка если имеется ровно 1 карта масти, и 3 очка если карт этой масти не
существует.
Необходимо по набору карт,
содержащемуся в массиве hand, подсчитать количество очков. Карты крестовой
масти нумеруются с 1 до 13, бубновой с 14 до 26, червовой с 27 до 39, пиковой с
40 до 52. Для каждой масти карты нумеруются в порядке туз, 2, 3, …, 10, валет,
дама, король. Например, король червовый имеет номер 39, а туз пиковый имеет
номер 40.
Класс: BridgePts
Метод: int
pointValue(vector<int> hand)
Ограничения:
hand содержит 13 разных чисел, 1 £
hand[i] £ 52.
Вход. Массив чисел hand, описывающий имеющиеся на руках 13 карт.
Выход. Количество очков в имеющихся 13 картах.
Пример входа
hand |
{25,14,15,16,17,18,19,20,21,22,23,24,26} |
{2,3,4,15,18,28,29,30,41,42,43,16,17} |
Пример выхода
19
0
РЕШЕНИЕ
моделирование
В массиве suit вычисляем
количество карт соответствующей масти (suit[0] соответствует числу карт
крестовой масти), в массиве card подсчитываем количество карт определенного
значения (card[0] соответствует количеству тузов, а card[12] количеству королей). Далее подсчитываем
количество очков по описанному в условии задачи алгоритму.
ПРОГРАММА
#include <cstdio>
#include <vector>
using namespace std;
int suit[4], card[13];
class BridgePts
{
public:
int pointValue(vector<int>
hand)
{
int i, res;
for(res = i = 0; i < hand.size();
i++)
card[(hand[i] - 1) % 13]++, suit[(hand[i] - 1) / 13]++;
res += 4 * card[0] + 3 * card[12] + 2 * card[11] + card[10];
res = res + (suit[0] == 2) + (suit[1] == 2) + (suit[2] == 2) +
(suit[3] == 2);
res = res + 2*(suit[0] == 1) + 2*(suit[1] == 1) + 2*(suit[2] == 1) +
2*(suit[3] == 1);
res = res + 3*(suit[0] == 0) + 3*(suit[1] == 0) + 3*(suit[2] == 0) +
3*(suit[3] == 0);
return res;
}
};