Друзья, подскажите, как решить задачу.
Человек забыл пин-код от двери в здание.
Клавиатура выглядит следующим образом:
┌───┬───┬───┐
│ 1 │ 2 │ 3 │
├───┼───┼───┤
│ 4 │ 5 │ 6 │
├───┼───┼───┤
│ 7 │ 8 │ 9 │
└───┼───┼───┘
│ 0 │
└───┘
Человек вспоминает, что, вроде бы, пин код был 1357, но вероятно каждая цифра должна быть сдвинута по горизонтали или вертикали, но не по диагонали.
Например, вместо 1 может быть 2 или 4. Ну а вместо 5 может быть 2, 4, 6 или 8.
Помоги человеку попасть в здание.
Входные данные
Строка с пин-кодом. Длина строки от 1 до 8 цифр, например, 1357.
Выходные данные
Исходный пин-код и возможные варианты пин-кодов с учетом сдвигов, отсортированные и разделенные запятой.
Пример
Входн. данные: 11
Выходн. данные: 11,12,14,21,22,24,41,42,44
Входн. данные: 8
Выходн. данные: 0,5,7,8,9
Входн. данные: 46
Выходн. данные: 13,15,16,19,43,45,46,49,53,55,56,59,73,75,76,79
Важно, что пин-коды должны быть строками, так как могут начинаться с 0, и должны быть отсортированы, как строки.
PS:
Я написал код как будто пользователь ввёл пин 1357, получилось 135 варинатов пинов. Но как сделать так, чтобы прога создавала сама циклы в зависимости от введённых цифр ( от 1 до 8) и потом суммировала элементы строковых массивов (как у меня в примере)?
Вот мой код:
public class Main {
public static void main(String[] args) {
String[] ar1 = {"1","2","4"};
String[] ar2 = {"3","2","6"};
String[] ar3 = {"5","2","4","6","8"};
String[] ar4 = {"7","4","8"};
for (int i = 0; i <ar1.length; i++) {
for (int j = 0; j < ar2.length; j++) {
for (int k = 0; k < ar3.length; k++) {
for (int z = 0; z < ar4.length; z++) {
String s = ar1[i] + ar2[j] + ar3[k] + ar4[z];
System.out.println(s + " ");
}
}
}
}
}
}
Витя
14 уровень
Задача
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр Вахрушев
16 августа 2019, 13:57
Привет. Задачка из Школы программистов HeadHunter, если не ошибаюсь.
Решается в лоб:
1. Сформируй для каждой цифры case массива Возвращаемых значений
2. Считай с консоли пин, добавь его в TreeSet (уберет дубли, автоматом сортирует, нет лишнего)
3. Для каждой цифры в цикле получи из case массив возможных подстановок
4. Для каждой цифры каждого числа в TreeSet последовательно замени цифру и добавь в TreeSet
Все числа храни в String, замену делай через StringBuilder.setCharAt
Возможно, криво описал, строго не судите
0
Витя
16 августа 2019, 17:05
Привет, Александр. Благодарю за наводку, да всё верно хехешная задачка, я лишь ищу наводку, а не собираюсь её содрать откуда-либо. Обязательно попробую решить через тримапу (хотя слабо пока в ней разбираюсь).
У меня получилось решить задачу наполовину. Я сам писал код без всякой помощи из вне, потому и коряво. Если представить, что ячеек не 8, а допустим одна, то все варианты выводятся правильно. Но как только я начинаю подключать внешний цикл на 8 элементов, ничего не выводится. Вот код, можно ли его тут усовершенствовать, обобщив на 8 ячеек с использованием двумерного массива (String[][] arrD) без применения тримапы, как ты советовал?
текст кода в файле код.txt - https://github.com/Victor-DB/Education-project.git
0
Justinian Judge в Mega City One Master
13 августа 2019, 15:49
Это задача на перестановки, рекурсия хорошо идет, можно и без нее.
Если ты при решении задачи, придумал что-то такое, что не знаешь даже как записать синтаксически или не можешь нагуглить, у тебя только один вывод - менять алгоритм. Меняй до тех пор, пока ты на разобьешь алгоритм на те составные части которые ты сможешь реализовать.
Не знаешь как придумать алгоритм, бери ручку и бумагу и реши простенький пример схематично в уме. Прислушайся к себе, как и что ты делаешь в уме.
Рассмотри условие с разных сторон, разбей на составные части, мы здесь видим поиск подходящих чисел для каждой цифры (сдвиг вправо влево), составление последовательностей возможных цифр, перебор вариантов, склеивание строки и тд.
Разбивай каждую задачу на подзадачу. Ну и думай ) Решение задач интервьюерам все-равно наверное, мыслительные процессы, вот что их интересует. А алгоритмическое мышление развивается на таких штуках.
Будет тяжело почитай про комбинаторику / перестановки. 0
Витя
14 августа 2019, 07:26
Благодарю! Попробую.
0
Saigontov
26 сентября 2019, 12:19
Получилось в итоге?
Я сейчас тоже сижу над этой задачкой 😬
0