• Задача с замощением прямоугольной области L образной плиткой

    @Rapt Автор вопроса
    На другом форуме мне ответили как решить эту задачу комбинаторно, вот код:
    # length % 3 = 0; width % 2 = 0
    def calculate(length, width):
        degree = (length / 3) * (width / 2)
        print(2 ** degree)
     
    if __name__ == "__main__":
        length = input("Enter L: ")
        width = input("Enter W: ")
        
        length = int(length)
        width = int(width)
        
        if length % 3 == 0:
            if width % 2 == 0:
                calculate(length, width)
            else:
                raise AssertionError("Wrong data!")
        elif length % 2 == 0:
            if width % 3 == 0:
                calculate(width, length)
            else:
                raise AssertionError("Wrong data!")
        else:
            raise AssertionError("Wrong data!")
        input()


    Площадь двух соединённых плиток 2*3=6 можно взять за единицу, причём плитки могут соединятся двумя способами, а следовательно каждая полученная единица площади может принимать 2 состояния. Число всех состояний для двух единиц 2*2, для трёх 2*2*2 (формула комбинаторики для размещения из n по m), то есть в итоге 2 в степени количества единиц. Переменной degree присваивается количество данных единиц, после чего выводится 2 в степени degree.

    Также спасибо @encyclopedist за познавательную статью! По ней сделать решение будет намного интересней!
    Ответ написан
    Комментировать