Матч 323, Несводимое число (IrreducibleNumber)

Дивизион 2, Уровень 1

 

Задан массив чисел a. Число k называется несводимым, если его нельзя представить в виде суммы одного или более элементов из a. Найти наименьшее положительное несводимое число.

 

Класс: IrreducibleNumber

Метод: int getIrreducible(vector<int> a)

Ограничения: a содержит от 1 до 3 элементов, 1 £ a[i] £ 100.

 

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

 

Выход. Наименьшее положительное несводимое число.

 

Пример входа

a

{1, 1}

{1, 2}

{4, 1, 3}

 

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

3

4

2

 

 

РЕШЕНИЕ

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

 

Отсортируем элементы массива a. Пусть ck = . Если  ck + 1 < ak+1, то число ck + 1 не представимо в виде суммы элементов массива a. Если для всех k (0 £ k < n) выполняется неравенство ck + 1 < ak+1, то искомым числом будет cn + 1, где n – размер массива a.

 

 

ПРОГРАММА

 

#include <cstdio>

#include <algorithm>

#include <vector>

using namespace std;

 

class IrreducibleNumber

{

public:

  int getIrreducible(vector<int> a)

  {

    int i, c = 0;

    sort(a.begin(),a.end());

    for(i = 0; i < a.size(); i++)

    {

      if (c + 1 < a[i]) return c + 1;

      c += a[i];

    }

    return c + 1;

  }

};