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

  }

};