Привет, читатель, это мой первый пост на Medium. Я надеюсь, вам понравится это!

Мне задали вопрос ниже в одном из интервью по кодированию, вот мой подход и решение для него.

Вопрос:

Нам дана стена высотой h и длиной l, и мы должны спроектировать ее из кирпичей таким образом, чтобы:

  1. Когда кирпичи укладываются друг на друга, никакие края двух кирпичей не совпадают (кроме углов).
  2. После укладки кирпичей общая длина составит l, а высота — h.
  3. Есть 2 вида кирпичей: 2X1 и 3X1.

Пример:

Стена 1 = длина:7 и высота:5

Стена 2 = длина:6 и высота:4

Наблюдения:

  1. Аранжировки можно чередовать. Итак, нам нужно всего 2 набора комбинаций, ребра которых не совпадают.

Решение:

  1. Для нечетной длины:
  • одна комбинация может быть составлена ​​из первого кирпича 3X1 и последующих кирпичей 2X1.
  • вторая комбинация может быть обратной первой комбинации (кирпичи 2X1, за которыми следует один кирпич 3X1).

2. Для четной длины:

  • одну комбинацию можно составить, заполнив все кирпичи 2X1
  • другая комбинация может быть составлена ​​из первого кирпича 3X1, за которым следуют кирпичи 2X1, а за ними последний кирпич 3X1.

Анализ решения:

  1. Для нечетной длины:
  • Общее количество использованных кирпичей 3X1 = 1
  • Общее количество использованных кирпичей 2X1 = (l-3)/2
  • Всего кирпичей в первой и второй комбинациях одинаково.

2. Для четной длины:

  • Общее количество кирпичей 3X1 в первой комбинации=0
  • Общее количество кирпичей 2X1 в первой комбинации = l/2
  • Общее количество кирпичей в первой комбинации=l/2
  • Общее количество кирпичей 3X1 во второй комбинации=2
  • Общее количество кирпичей 2X1 во второй комбинации = (l-6)/2
  • Общее количество кирпичей во второй комбинации=2+((l-6)/2)

Пограничные случаи:

Некоторые из комбинаций не достижимы для такого расположения:

  1. если длина 0.
  2. если длина 1.
  3. если длина 4.

Код

Спасибо за чтение!

Ссылка на Discord: https://discord.gg/zEHhKWQm по любым вопросам, сеансы отладки.