Здравствуйте. Мучаю задачку довольно долго - вариантов решений было уже миллион.
Сейчас решил все операции производить в массивах. Т.е. все числа (получаемые и проверяемые на арсмтронговость) я представил в виде массива. Например число 1338 - это у меня {0, 0, 0, 1, 3, 3, 8} (количество ячеек в массиве зависит от разрядности N). Скажите - эта концепция вообще правильная?
У меня проблема с тем, чтобы найти верный путь.
Я выяснил алгоритм, по которому надо перебирать числа, но этот алгоритм - не панацея.
Сейчас я решил сделать так:
Получаю подходящее число.
Перемножаю это число (возвожу его цифры в степень и складываю), получаю результат.
Проверяю результат - является ли он числом Армстронга.
Все операции провожу таким образом, что числы представлены в виде массива.
Скажите, эта концепция вообще верная? Или по какому пути вы мне рекомендовали бы пойти?
Евгений
41 уровень
Скажите - верна ли моя идея?
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
22 марта 2020, 13:11
Ну что значит верная, неверная..для брут форса сойдет, я тоже использовал массивы разрядов, алгоритм получился долгий, но я в 10 с со скрипом влез.
Напиши код, сделай его рабочим и посмотри за сколько времени он на Integer.MAX_VALUE отработает, за сколько на Long.MAX_VALUE, это тебе будет лучший показатель жизнеспособности твоих концепций и подходов :)
0
Евгений Backend Developer в KHAN Group Expert
22 марта 2020, 13:15
Вот пытаюсь) Кстати, правильно ли я понимаю, что если я получил число, допустим, 99, перемножил его, получил 162, то 162 не имеет смысла проверять на то, является ли оно числом Армстронга, т.к. его разрядность больше, чем у числа 99?
0
Justinian Judge в Mega City One Master
22 марта 2020, 13:18
а как ты это реализуешь в коде? :)
0
Евгений Backend Developer в KHAN Group Expert
22 марта 2020, 13:19
Если я использую числа в виде массивов, то довольно просто. Просто сравню их длины (ну точнее сколько у каждого массива ячеек с нулями в начале). Вроде такого: {0, 0, 0, 9, 9} и {0, 0, 1, 6, 2}
0
Justinian Judge в Mega City One Master
22 марта 2020, 13:36
Что-то ты меня уводишь в свои дебри :)
Не хочу туда
Есть число 99. Как без проверки на число армстронга ты получишь число 162? Никак.
Если ты получил число 162, ты уже проверяешь 99 на число армстронга.
99 !=162 все понятно. Считать нули к чему?
Второй момент, у тебя многозначно написано "162 не имеет смысла проверять". Если мы говорим за 162 как отдельное число, хм..смысла не имеет - три других числа, там другой результат может быть, может и 162 выйдет, а вдруг.
Получается то о чем ты пишешь касается первого момента, о котором я говорил.
162 это УЖЕ 99 проверенно на число армстронга.
+1
Евгений Backend Developer в KHAN Group Expert
22 марта 2020, 13:46
Нет, я имею в виду, что:
99 - это число, полученное в результате изначального перебора. Мы ведь потом должны его перемножить и результат перемножения уже проверить на соответствие числу Армстронга. Т.е. получим от 99 162, а уже 162 проверяем на то, является ли оно числом Армстронга. Ну или взяли мы изначальное число 135. Перемножили, получили 153. А потом 153 проверяем - не число ли это Армстронга случаем.
0
Justinian Judge в Mega City One Master
22 марта 2020, 14:05
если мы взяли изначальное число 135 и получили 153, то мы нашли наше число арсмтронга.
про 99 вообще не понял, что ты на что проверяешь, начинаешь с 99, а заканчиваешь проверкой 162 на числа армстронга. Это два разных числа и две разных проверки.
Не понимаю, нужен конкретный пример, я понимаю что ты в контексте своих мыслей и тебе все понятно :)
Вот с 135 понятно, у нас есть число 135, мы его проверяем, получили 153, разряды совпадают, это наше число армстронга, идем дальше.
153 ведь не будет проверяться (ну в моем случае так точно) ты ведь код не показываешь, я могу только уловить вибрации струн относительно алгоритма, как ты перебираешь числа в принципе.
Отталкивайся от кода.
Пиши код и проверяй свои теории на практике, мы тут обсуждаем сферического армстронга в вакууме на пальцах, толку мало.
0
Евгений Backend Developer в KHAN Group Expert
22 марта 2020, 14:28
Так, да. Видимо у меня действительно лишняя проверка. Получается надо сделать так:
1. Берём число, подходящее по алгоритму (ну, например, 135)
2. Перемножаем, получаем результат (получаем 153).
3. Проверяем, что разряды полученного числа соответствуют разрядом изначального.
+1
Justinian Judge в Mega City One Master
22 марта 2020, 14:41
угу
0
Vitalachka
11 июля 2020, 22:51
ага вот где собака порылась! а я тоже лишнюю проверку умудрилась сделать :-)
0