Матч 7, Пять в ряд (StraightArray)

 

Массив чисел содержит стрит, если в нем существуют пять последовательных целых чисел. Например, массив {6, 1, 9, 5, 7, 15, 8} содержит стрит, так как в нем есть числа 5, 6, 7, 8 и 9. Необходимо добавить к массиву nums наименьшее количество чисел так, чтобы он содержал стрит.

 

Класс: StraightArray

Метод: int howManyMore(vector<int> nums)

Ограничения: text содержит от 1 до 50 символов ‘a’ – ‘z’, ‘A’ – ‘Z’, ‘0’ – ‘9’, ‘ ‘ (пробел).

 

Вход. Массив чисел nums.

 

Выход. Наименьшее количество чисел, которое следует добавить в массив nums, чтобы он содержал стрит.

 

Пример входа

nums

{5, 6, 7}

{5, 7, 9, 8492, 8493, 192398}

{6, 1, 9, 5, 7, 15, 8}

 

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

2

2

0

 

 

РЕШЕНИЕ

полный перебор

 

Для каждого числа i массива nums в переменной s подсчитываем, сколько чисел из множества {i, i + 1, i + 2, i + 3, i + 4} содержится в массиве. В переменной res запоминаем наибольшее из подсчитанных значений. Возвращаем ответ на задачу, равный 5 – res.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <algorithm>

using namespace std;

 

class StraightArray

{

public:

  int howManyMore(vector<int> nums)

  {

    int i, j, s, res;

    vector<int>::iterator iter;

    for(res = i = 0; i < (int)nums.size(); i++)

    {

      for(s = j = 1; j < 5; j++)

      {

        iter = find(nums.begin(),nums.end(),nums[i] + j);

        if (iter != nums.end()) s++;

      }

      if (s > res) res = s;

    }

    return 5 - res;

  }

};