Алгоритмы-числа

  • 20
  • Недоступна
Ура, задачи на алгоритмы! Их очень любят резиденты планеты Линейный Хаос. И вы должны любить, по крайней мере, до того момента, как пройдёте пару-тройку собеседований. Итак, у вас есть число из некоторого количества чисел. Нужно найти все числа меньше N, которые удовлетворили бы некоторому критерию (о нём узнаете в самой задаче!).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (629)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hamster🐹 ClipMaker в TikTok
17 января, 18:02
Ну вот и я отмечаюсь в списке решивших эту эпичную задачу🥳🥳🥳 это было очень тяжело... 21 попытка) ну естественно спасибо Павлу, без его алгоритма и помощи не решила бы
БелК в труселях
Уровень 32, Покровск, Ukraine
17 января, 13:10
Задача слов нет одни эмоции. 1,5 недели и никак. Решил тяп-ляп. И антирекорд мой!!!
Peter Sumkin
Уровень 35, Москва, Россия
31 декабря 2021, 18:45
Очень обидно, решил сам, абсолютно не зная ничего про числа Армстронга - нужно все-таки намекать, если перебор не нужен. Получил абсолютно идентичные верным ответы (при гораздо более компактном коде), но валидатор не принимает - не ясно, почему. Пишет, что слишком долго проверяет, хотя в консоли на локальной машине все иначе. Самым сложным оказалась конвертация списка Long в массив long - оптимальнее, конечно, поменять тип возвращаемого значения на List<Long>, но, возможно, выбранный тип тоже как-то связан с понятием чисел Армстронга. Все-таки хочется понимать, если эти числа важны в работе, почему нет объяснения, если нет - ну, зачем так усложнять решение. public static long[] getNumbers(long N) { if (N < 1) { return new long[0]; } ArrayList<Long> myResult = new ArrayList<>(); for (long i = 1; i < N; i++) { String myChar = String.valueOf(i); long mySum = 0; for (int j = 0; j < myChar.length(); j++) { mySum += Math.pow(Character.getNumericValue(myChar.charAt(j)), myChar.length()); } if (i == mySum) { myResult.add(i); } } long[] result = myResult.stream() .mapToLong(Long::valueOf) .toArray(); return result; } Вот что выдается в консоль: [1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407] memory 512 time = 0 [1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834] memory 3811 time = 0 Памяти, действительно, нужно больше, чем в "правильном решении", но, кажется, что все соответствует условию. Почему не принимает?
Ksenia Volkova Java Developer в DXC Master
13 января, 20:06
А сколько будет работать для 1_000_000_000?
Михаил Велидчук System Engineer в Arcos LTD
30 декабря 2021, 12:43
Решил самостоятельно. Две... ДВЕ НЕДЕЛИ!!! Не смотрел в готовое решение, чем несказанно горд!
Valeriy
Уровень 30, Киев
27 декабря 2021, 20:04
Задача крутая делать ее конечно же я не буду
Buble76
Уровень 33, Москва, Россия
12 декабря 2021, 11:01
Вам удалось ее решить с 9 попытки. Среднее количество попыток для этой задачи 5.55. Всего эту задачу решили 7431 учеников. Где эти гении ??
Anonymous #2470225
Уровень 31, Véry
6 декабря 2021, 09:48
Павлу нужно премию выписать. Мне кажется если бы не он - 70% людей не решили бы эту задачу (и я в их числе) 1) Придумать матрицу степеней и использовать ее вместо Math.pow - к этому я еще мог додуматься. 2) Въехать зачем нужно два раза находить сумму степеней - я просто не мог несколько дней, видать не то мышление абсолютно у меня. 3) То, что нужно генерить числа понятно, но как декременировать потом это число, при этом не проверяя "числа повторки" - никогда бы не додумался если бы не пример метода из комментария Павла. 4) Еще несколько часов ушло на то, чтобы додуматься как убирать нули в начале числа и снова делать проверку - ничего умнее не придумал как сделать копию массива и уже в ней удалять. Получился вложеный while с дублированным кодом проверки степеней. 5) Ну и где-то 5-7 потраченых попыток потому, что не удалил Long.MAX_VALUE - из метода main ;) Вообще мне трудно дается курс, часто подглядываю решения JR но обычно всегда ситуация - что я на верном пути, не хватает какойто ключевой идеи - "маленького толчка". Но эта задача и еще одна, где нужно было искать тэги - это просто капец, у меня вообще небыло идей - более того даже гляда на готовое решение я не понимал его. Хотя конкретно готовое решение этой задачи скорее всего намерено так усложнили, иначе как объяснить переменные типа N,S непонятные minPow/maxPow итд. Отдельный метод который генерит матрицу каждый раз при вызова getNumbers.
Владимир
Уровень 25, Россия
24 ноября 2021, 15:03
Вот это задачка конечно... 4 вечера на нее убил. Боюсь представить, что еще подкинет Бобров
KSU
Уровень 32, Москва, Russian Federation
9 ноября 2021, 12:20
Anonymous #2470225
Уровень 31, Véry
6 декабря 2021, 10:48
Полезно, но увы, идея перебирать все числа циклом заведомо провальная в наших условиях.
Andrey tech support engineer в Weigandt consulting
5 ноября 2021, 15:08
Много времени потратил уже у финиша, когда на MAX_VALUE отрабатывало за 11 ~ 20 с. Не будьте как я, не конвертите в число символ строки через
Integer.parseInt(String.substring(i, i+1))
есть
Character.getNumericValue(s.charAt(i))
который работает около 4 раз быстрее