Матч
212, Счет в игре (YahtzeeScore)
Дивизион 2, Уровень
1
Рассмотрим подсчет очков в игре
яте. Бросаются 5 кубиков, на гранях которых расположены числа от 1 до 6. Игрок
называет некоторое число. Активными считаются кубики, на которых выпало это
число. Игрок получает количество очков, равных сумме чисел, выпавших на
активных кубиках. Например, пусть на кубиках выпали значения {2, 2, 3, 5, 4}.
Если игрок назовет 2, то активными будут первый и второй кубики, сумма очков на
которых равна 4. Если игрок назовет 5, то получит 5 очков (имеется один кубик с
5 очками).
По заданному массиву toss,
содержащему выпавшие значения на 5 кубиках, необходимо определить наибольшее
количество очков, которое может получить игрок.
Класс: YahtzeeScore
Метод: int
maxPoints(vector<int> toss)
Ограничения: toss содержит в точности 5 чисел, 1 £ toss[i] £ 6.
Вход. Массив чисел toss.
Выход. Наибольшее количество очков, которое может получить игрок.
Пример входа
toss |
{2, 2, 3, 5, 4} |
{6, 4, 1, 1, 3} |
{5, 3, 5, 3, 3} |
Пример выхода
5
6
10
РЕШЕНИЕ
элементарные вычисления
Очевидно, что игрок будет
называть число от 1 до 6. Для каждого такого названого числа подсчитаем сумму
очков, которое он бы получил. Среди всех найденных сумм очков найдем
наибольшую.
Пусть игрок называет число i. Тогда сумма его очков s равна количеству чисел i в массиве toss, умноженное на i.
ПРОГРАММА
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
class YahtzeeScore
{
public:
int maxPoints(vector<int>
toss)
{
int i, s, max = 0;
for(i = 1; i <= 6; i++)
{
s = count(toss.begin(),toss.end(),i) * i;
if (s > max) max = s;
}
return max;
}
};