Нужен алгоритм для решения этой задачи. Заранее спасибо за помощь.
Инопланетяне с планеты Пандора уже много лет исследуют землян. Для этого на Землю внедрено множество агентов-пандорианцев. Так как среднестатический пандорианец примерно в 20 раз меньше среднестатичестического землянина, для перемещения по планете они используют специальных роботов, внешне неотличимых от жителей Земли. Внутри этих роботов с комфортом располагается команда агентов-исследователей.
Сегодня команда, управляющая роботом «Геннадий», получает свой гонорар. Команда состоит из двух пандорианцев, Джейка и Джейка, которые в данный момент исследуют жителей России. Гонорар исследователи получают один на двоих наличными в обыкновенном российском банке.
Джейк и Джейк должны получить сегодня K рублей. Смогут ли они разделить полученные монеты и купюры на двоих так, чтобы гонорар оказался поделен поровну, вне зависимости от того, какими именно монетами и купюрами им решат выдать K рублей в банке?
Напишите программу, которая поможет Джейку и Джейку ответить на этот вопрос.
Входные данные
На вход подается число K — сумма, которую получат Джейк и Джейк ( 1 ≤ K ≤ 100 000 ).
Выходные данные
Выведите «YES», если вне зависимости от того, какими именно монетами и купюрами будет выдана нужная сумма, их можно будет поделить поровну, и «NO» — в противном случае. Действие происходит в России, поэтому для выдачи нужной суммы могут быть использованы купюры и монеты следующих номиналов: 1, 2, 5, 10, 50, 100, 500, 1000 и 5000 рублей.
Другие языки программирования и технологии
Помогите составить алгоритм решения задачи
Независимо от используемых купюр можно поделить суммы:
4, 20, 40, 200, 400, 2000, 4000, 10000 * n
и комбинации этих сумм.
Т. е. разряд единиц рублей - только 0 или 4
Разряды десятков, сотен и тысяч рублей - только 0, 2 или 4
Разряды десятков тысяч и больше не имеют значения.
readln(k);
flg := (k mod 10) in [0, 4];
k := k div 10;
flg := flg and ((k mod 10) in [0, 2, 4]);
k := k div 10;
flg := flg and ((k mod 10) in [0, 2, 4]);
k := k div 10;
flg := flg and ((k mod 10) in [0, 2, 4]);
if flg then writeln('yes') else writeln('no')
4, 20, 40, 200, 400, 2000, 4000, 10000 * n
и комбинации этих сумм.
Т. е. разряд единиц рублей - только 0 или 4
Разряды десятков, сотен и тысяч рублей - только 0, 2 или 4
Разряды десятков тысяч и больше не имеют значения.
readln(k);
flg := (k mod 10) in [0, 4];
k := k div 10;
flg := flg and ((k mod 10) in [0, 2, 4]);
k := k div 10;
flg := flg and ((k mod 10) in [0, 2, 4]);
k := k div 10;
flg := flg and ((k mod 10) in [0, 2, 4]);
if flg then writeln('yes') else writeln('no')
Я бы решал от противного. То есть для любого К старался сделать такой размен, чтобы нельзя было поделить. Копай в этом направлении.
Потому что если делать прямой перебор разменов, как советует товарищ выше, то при больших суммах тебе никаких ресурсов не хватит.
Оптимизации: если К - нечетное, все ясно. Если К можно составить из нечетного количества одинаковых купюр - тоже. И наоборот: если К делится на четное количество любых номиналов.
Потому что если делать прямой перебор разменов, как советует товарищ выше, то при больших суммах тебе никаких ресурсов не хватит.
Оптимизации: если К - нечетное, все ясно. Если К можно составить из нечетного количества одинаковых купюр - тоже. И наоборот: если К делится на четное количество любых номиналов.
Ну тупо в лоб:
1. Определить все варианты размена заданной суммы представленными номиналами.
2. Для каждого варианта определить, можно ли K/2 набрать монетами из этого варианта.
Сразу напрашивается оптимизация для нечетных К.
Если подумать, то, наверное, еще что-нибудь сократить можно, но думать лень на ночь глядя
1. Определить все варианты размена заданной суммы представленными номиналами.
2. Для каждого варианта определить, можно ли K/2 набрать монетами из этого варианта.
Сразу напрашивается оптимизация для нечетных К.
Если подумать, то, наверное, еще что-нибудь сократить можно, но думать лень на ночь глядя
Я бы решал от противного. То есть для любого К старался сделать такой размен, чтобы нельзя было поделить. Копай в этом направлении. Оптимизации: если К - нечетное, все ясно. Если К можно составить из нечетного количества одинаковых купюр - тоже. И наоборот: если К делится на четное количество любых номиналов.
Похожие вопросы
- Информатика. Программирование. Обработка массивов данных. Помогите составить алгоритм и прог. код к нему.
- подскажите алгоритм решения задачи: Действительное число а. Использовать только умножение. Получить а^64 за 6 операций.
- Помогите, пожалуйста, с решением задачи из задачника Абрамяна.
- Помогите пожалуйста оптимизировать решение задачи (Зайчик) на C++
- Помогите написать алгоритм к задаче по информатике
- составить программу решения задачи дано 10 чисел определить сколько из них принимает наибольшее значение.как решить?*(((
- помогите составить алгоритм вычисления площади трапеции по двум основаниям и высоте. На языке программирования Basic
- Помогите пожалуйста с решением задач в паскале
- Помогите пожалуйста с решением задачи, если можно объясните как расшифровать.
- Составьте программу решения старинной задачи: сколько можно купить быков (бык стоит 10рубей) , коров (по 5 рублей) и тел