Матч 20, Фамилия (Surname)

 

Каждой фамилии соответствует число, равное сумме ASCII кодов символов, из которых оно состоит. Массив строк surnames содержит фамилии, каждая из которых содержит символы ‘A’ – ‘Z’. Выигрывает тот, чей фамилии соответствует наибольшее число. Вернуть наименьший индекс выигравшей фамилии.

 

Класс: Surname

Метод: int bestSurname(vector <string> surnames)

Ограничения: address1 и address2  содержат от 0 до 50 символов ‘a’ – ‘z’, ‘A’ – ‘Z’, ‘0’ – ‘9’.

 

Вход. Массив строк surnames.

 

Выход. Наименьший индекс фамилии, для которой сумма ASCII кодов символов наибольшая.

 

Пример входа

surnames

{"JONES", "WILLIAMS", "SMITH", "HARPER"}

{"JOHNSON", "CHU", "LOPEZ", "SCAFFIDI", "PASQUALE", "KRUMME"}

{"ABA", "BAA", "CAB", "BAC"}

 

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

1

4

2

 

 

РЕШЕНИЕ

элементарные вычисления

 

Функция score вычисляет сумму ASCII кодов символов, из которых состоит строка name. Просматриваем все фамилии, вычисляем для них сумму ASCII кодов символов и находим индекс index той фамилии, для которой эта сумма наибольшая.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

#include <algorithm>

#include <numeric>

using namespace std;

 

int score(string name)

{

  return accumulate(name.begin(),name.end(),0);

}

 

int f(string a, string b)

{

  return score(a) < score(b);

}

 

class Surname

{

  public:

  int bestSurname(vector<string> surnames)

  {

    return max_element(surnames.begin(),surnames.end(),f) - surnames.begin();

  }

};