найти самое круглое число между двумя заданными |
Здравствуйте, гость ( Вход | Регистрация )
найти самое круглое число между двумя заданными |
mezmay |
20.3.2010, 16:35
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
Нужна функция, которая бы быстро могла найти самое круглое целое число между двумя заданными. Например:
f(9, 11) = 10; f(121, 199) = 150; f(1, 9999) = 5000; есть моя медленная реализация (долго на больших, сильно удаленных друг от друга числах):
вопрос - КАК сделать это быстрее? |
|
|
BRE |
20.3.2010, 17:23
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
f(121, 199) = 150;
А в этом случае ответ точно должен быть 150, а не 160? Что должна вернуть функция, при: f(22, 23) = ? Если работать с целыми числами, то я бы начал пробовать с этого:
Опиши подробней свойства функции. Сообщение отредактировал BRE - 20.3.2010, 17:54 |
|
|
mezmay |
20.3.2010, 18:27
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1 |
f(121, 199) = 150; А в этом случае ответ точно должен быть 150, а не 160? Что должна вернуть функция, при: f(22, 23) = ? Если работать с целыми числами, то я бы начал пробовать с этого:
Опиши подробней свойства функции. В идеале функция должна возвращать те же значения, которые выдает моя. Опищу свойства этого самого требуемого круглого числа: на примере (121, 199): как в исходнике написано, основа всех круглых чисел - числа 1,2,5, потом они умножаются на 10 и получается тройка 10, 20, 50, ... 1000, 2000, 50000, ... Итак, нам на вход поступили числа 121 и 199. Рассматриваем все числа в заданном диапазоне. Делим каждое из них на 1, на 2 , на 5, потом умножаем массив на 10 и делим каждое уже на 10, 20, на 50. на 100 ни одно из чисел заданного диапазона не делится, следовательно, самое большое число, на которое разделилось одно из чисел диапазона - 50. Ему соответствует значение 150. его и возвращаем! Функция f(22, 23) должна вернуть 22 |
|
|
Текстовая версия | Сейчас: 30.11.2024, 0:35 |