биссектрисе второго и четвертого координатного угла и проходят через точку

Мы представили отрезок такой прямой для
Для
У вас есть также некоторое число таких
Исходя отсюда, следующие числа
Теперь вы легко сможете доказать, что интересующая нас последовательность
Составьте программу, перечисляющую
6. Комбинаторные задачи
Головоломка 20. Полное решение.
Поскольку эта задача всюду решена, предложим также и здесь решение: это избавит вас от поисков других решений; и, кроме того, я буду уверен, что вы посмотрели на все существенные места этой задачи. Есть книги, которые… Но это — совсем другая история.
Заметим сначала, что два ферзя не могут находиться на одной строке (горизонтали) и, поскольку нужно поставить 8 ферзей на 8 строк, то на каждой строке есть ферзь. Поэтому я буду говорить «ферзь
Точно также, есть только один ферзь в каждом столбце. Но совершенно ясно, что я не могу управлять в одно и то же время размещением и по строкам и по столбцам — собственно, это от меня в задаче и требуется. Я собираюсь поэтому размещать ферзей на последовательных строках, начиная сверху.
Чтобы начать, я помещаю ферзя в первый столбец на первой строке. Тогда мне остается решить меньшую задачу; разместить 7 ферзей на 7 последних строках шахматной доски, учитывая, что ферзь стоит на первом поле первой строки. Я получу тогда все решения с ферзем 1 в столбце 1. Затем я поставлю ферзя 1 в столбец 2 и разрешу задачу с 7 ферзями, и т. д. — 8 раз.
Обобщим. Мы собираемся решить частную, но нужную задачу: полагая, что уже есть ферзи, правильно размещенные на строках от 1 до
— мы пробегаем все поля на строке
— если поле свободно (т. е. не бьется уже поставленными ранее ферзями), то мы ставим на него ферзя
При
Для задачи HR (
HR (
ДЛЯ
ЕСЛИ место
занять
ЕСЛИ
ИНАЧЕ HR(к + 1)
КОНЕЦ_ЕСЛИ
освободить
КОНЕЦ_ЕСЛИ
ВЕРНУТЬСЯ
Операция «освободить
Эта процедура рекурсивна, так как она обращается сама к себе. Тщательно изучите ее. Если вы исходите из гипотезы, что HR (
Если у вас в наличии нет никакого другого языка, кроме Бейсика, или если вы раб своего языка до такой степени, что не желаете учить что-нибудь, кроме Бейсика, то вам придется писать итеративное решение. Это сложнее.
Будем исходить из наиболее общей ситуации. Пусть на шахматной доске уже размещено
— уже размещено по местам 8 ферзей (
— на строке с номером
— либо строка с номером
Запишем кусок программы, который различает эти три случая:
С: ЕСЛИ
ИНАЧЕ искать первое свободное поле на строке
ЕСЛИ нет таких полей ТО СБ
ИНАЧЕ СОК КОНЕЦ_ЕСЛИ
КОНЕЦ_ЕСЛИ
Рассмотрим теперь каждое из подсостояний.
СОК: есть свободное место в точке