Привет, читатель, это мой первый пост на Medium. Я надеюсь, вам понравится это!
Мне задали вопрос ниже в одном из интервью по кодированию, вот мой подход и решение для него.
Вопрос:
Нам дана стена высотой h и длиной l, и мы должны спроектировать ее из кирпичей таким образом, чтобы:
- Когда кирпичи укладываются друг на друга, никакие края двух кирпичей не совпадают (кроме углов).
- После укладки кирпичей общая длина составит l, а высота — h.
- Есть 2 вида кирпичей: 2X1 и 3X1.
Пример:
Стена 1 = длина:7 и высота:5
Стена 2 = длина:6 и высота:4
Наблюдения:
- Аранжировки можно чередовать. Итак, нам нужно всего 2 набора комбинаций, ребра которых не совпадают.
Решение:
- Для нечетной длины:
- одна комбинация может быть составлена из первого кирпича 3X1 и последующих кирпичей 2X1.
- вторая комбинация может быть обратной первой комбинации (кирпичи 2X1, за которыми следует один кирпич 3X1).
2. Для четной длины:
- одну комбинацию можно составить, заполнив все кирпичи 2X1
- другая комбинация может быть составлена из первого кирпича 3X1, за которым следуют кирпичи 2X1, а за ними последний кирпич 3X1.
Анализ решения:
- Для нечетной длины:
- Общее количество использованных кирпичей 3X1 = 1
- Общее количество использованных кирпичей 2X1 = (l-3)/2
- Всего кирпичей в первой и второй комбинациях одинаково.
2. Для четной длины:
- Общее количество кирпичей 3X1 в первой комбинации=0
- Общее количество кирпичей 2X1 в первой комбинации = l/2
- Общее количество кирпичей в первой комбинации=l/2
- Общее количество кирпичей 3X1 во второй комбинации=2
- Общее количество кирпичей 2X1 во второй комбинации = (l-6)/2
- Общее количество кирпичей во второй комбинации=2+((l-6)/2)
Пограничные случаи:
Некоторые из комбинаций не достижимы для такого расположения:
- если длина 0.
- если длина 1.
- если длина 4.
Код
Спасибо за чтение!
Ссылка на Discord: https://discord.gg/zEHhKWQm по любым вопросам, сеансы отладки.