Вопрос задан 29.01.2025 в 21:43. Предмет Информатика. Спрашивает Рогов Максим.

В кафе мороженое продают по три шарика и по пять шариков. Можно ли купить ровно k

шариков мороженого?

Формат входных данных
На вход программе дается одно целое число k (0≤k≤109).

Формат выходных данных
Программа должна вывести «YES», если в кафе можно купить ровно k шариков, или «NO», если нет.

ОБЯЗАТЕЛЬНО НА C++

Перейти к ответам

Ответы на вопрос

Отвечает Новосёлов Михаил.

Для решения этой задачи можно воспользоваться идеей проверки, можно ли представить число kk в виде суммы только множителей 3 и 5. Задача сводится к нахождению таких неотрицательных целых чисел xx и yy, чтобы 3x+5y=k3x + 5y = k.

Подход к решению

  1. Если kk делится на 3 или 5, то его можно легко набрать комбинацией этих шариков.
  2. Если kk больше 5, можно попробовать перебором проверить, можно ли выбрать такое количество шариков по 3 и по 5, чтобы в сумме получилось ровно kk.
  3. Основная идея заключается в том, что мы будем вычитать по 5 из kk до тех пор, пока оно не станет кратным 3 (или пока не станет меньше 0, тогда решения нет).

Алгоритм

  1. Начнем с kk и будем проверять, является ли kk кратным 3. Если да — выводим "YES".
  2. Если нет, вычитаем из kk по 5 до тех пор, пока kk не станет кратным 3 или не станет отрицательным.
  3. Если kk в процессе стал кратным 3 — выводим "YES". Если kk стал отрицательным — выводим "NO".

Пример кода на C++

cpp
#include using namespace std;

int main() { int k; cin >> k;

while (k >= 0) { if (k % 3 == 0) { cout << "YES" << endl; return 0; } k -= 5; }

cout << "NO" << endl; return 0; }

Пояснение кода

  1. Сначала считываем число kk.
  2. Далее в цикле while (k >= 0) проверяем, делится ли kk на 3. Если делится, то можно собрать ровно kk шариков, и мы выводим "YES".
  3. Если kk не делится на 3, уменьшаем kk на 5 и повторяем проверку.
  4. Если kk стал меньше нуля, значит, собрать ровно kk шариков невозможно, и мы выводим "NO".

Примеры работы

Вход:

7

Выход:

objectivec
NO

Вход:

10

Выход:

objectivec
YES

Вход:

12

Выход:

objectivec
YES

Обоснование правильности

Мы постепенно проверяем все возможные комбинации чисел 3 и 5 для заданного kk. Так как kk ограничено, алгоритм всегда завершается за приемлемое время.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос