Информация об изменениях

Сообщение Re: Совсем чуть-чуть от 13.02.2015 3:19

Изменено 13.02.2015 3:32 cures

Здравствуйте, olimp_20, Вы писали:

_>Проблема: задача вроде бы и элементарная, и почти решена, но два теста №24 и №25 — не проходит. Закончились идеи: что проверять и какие числа могут быть во входном файле...Подскажите, что еще необходимо проверить или где ошибка в алгоритме. Спасибо.


Стандартный способ: оформите своё нахождение как функцию, возвращающую искомое число как int, напишите другую функцию, которая делает это честно (перебирает все натуральные числа до N, и находит то, в котором наибольшая сумма цифр), после чего переберите все N до десяти тысяч, вычисляя результат каждой из двух функций, распечатайте те N, для которых результаты разные. Скорее всего такие найдутся даже до тысячи.

Читерский способ: перебираете все числа до N, но не (только) в виде инта, а в виде массива цифр, инкремент обычно будет сводиться к увеличению последней цифры, изредка — к старшим. При каждом инкременте соответственно изменяйте сумму цифр. Всего получите несколько миллиардов тактов, есть шанс уложиться, если сделаете аккуратно.

ЗЫ: большая просьба исходные тексты постить не только в тексте сообщения в блоке code, там съедаются переводы строк при попытке скопировать в файл, но и на хостинге типа ideone.com, там их можно будет сразу и запустить, потестировать.
Re: Совсем чуть-чуть
Здравствуйте, olimp_20, Вы писали:

_>Проблема: задача вроде бы и элементарная, и почти решена, но два теста №24 и №25 — не проходит. Закончились идеи: что проверять и какие числа могут быть во входном файле...Подскажите, что еще необходимо проверить или где ошибка в алгоритме. Спасибо.


Стандартный способ: оформите своё нахождение как функцию, возвращающую искомое число как int, напишите другую функцию, которая делает это честно (перебирает все натуральные числа до N, и находит то, в котором наибольшая сумма цифр), после чего переберите все N до десяти тысяч, вычисляя результат каждой из двух функций, распечатайте те N, для которых результаты разные. Скорее всего такие найдутся даже до тысячи.

Читерский способ: перебираете все числа до N, но не (только) в виде инта, а в виде массива цифр, инкремент обычно будет сводиться к увеличению последней цифры, изредка — к старшим. При каждом инкременте соответственно изменяйте сумму цифр. Всего получите несколько миллиардов тактов, есть шанс уложиться, если сделаете аккуратно.

ЗЫ: большая просьба исходные тексты постить не только в тексте сообщения в блоке code, там съедаются переводы строк при попытке скопировать в файл, но и на хостинге типа ideone.com, там их можно будет сразу и запустить, потестировать.

Upd: для 190 Ваша программа выведет 99, а правильный ответ 189 (сумма цифр тоже равна 18, а само число больше).