Если обобщить любое «начало» (левая часть)
И я таким образом не получил ничего. Это не означает утверждения, что на этом пути нельзя найти решения. Это я его не нашел.
Как я уже говорил, вы можете обратиться к математике за помощью в решении вашей задачи по информатике[28]. Но у информатики есть и свой собственный творческий дух. Почему бы ему не довериться? Эта задача сбивает вас с толку по причине ограничений на сложность алгоритма. Забудем их. Если вам сказано, что нужно решить задачу, и вам предоставлена свобода вплоть до максимальной сложности, что вы будете делать? Вы составите таблицу
Чтобы помочь вам, я предлагаю вам рассмотреть следующий вектор:
3 4 -8 2 -3 7 5 -6 1
Образуйте треугольную таблицу чисел
(1, 1 : 3), (4, 4 : 5), (6, 6 : 9).
Следовательно, есть в точности
Закончить предоставляю вам.
Часть III. И если вы все еще не нашли решения
Многие игры или головоломки уже не требуют никаких дополнительных пояснений. Но некоторые из них еще могут вам сопротивляться. Поэтому следует сказать вам все…
1. Случайные числа
Головоломка 1.
Первая стратегия. Нужно сравнить
Положим
Если вы начинаете
Таким образом, получаем начало программы:
ПОКА
ВЕРНУТЬСЯ
Теперь вы получили два равных элемента. Чтобы получить период, нужно пройти интервал между полученными числами — например, начиная с
ПОКА
ВЕРНУТЬСЯ
Мне пришлось рассказать вам все…
Вторая стратегия. Начните с
Вы непосредственно получаете период. Тщательно подсчитайте количество вычислений
Игра 4.
Если вы представляете игровое ноле прямоугольной таблицей, то перемещение обозначается изменением координат точки: добавлением или вычитанием чисел 1 или 2. Я разместил эти добавляемые количества (целые числа со знаком) в два вектора
2. Игры с числами
Головоломка 3.
Остановитесь, когда вы получите 5 в качестве цифры единиц с нулем «в уме».
Головоломка 4.
Представленный здесь алгоритм эквивалентен алгоритму, который можно найти в старых книгах по арифметике, и который действует на целые числа, разбитые на куски но 2 цифры в каждом куске. Вы можете либо разыскать доказательство в этих книгах, либо посмотреть в моей книге «Основы программирования», как можно доказать, что программа, реализующая этот алгоритм, действительно вычисляет квадратный корень. Но это рассуждение слишком сложно, чтобы воспроизводить его здесь.
Лично я работаю по основанию 10. Я представляю числа цепочками цифр. Присоединить 1 справа легко: это просто конкатенация. Сдвинуть вправо легко: используется индекс, сообщающий, начиная с какой позиции нужно урезать. Именно этот индекс и изменяется. Складывать с 2 легко, так как может быть не более одного переноса. Единственная тонкая операция — вычитание, Не проводите сравнения перед вычитанием: оно стоит так же дорого, как и само вычитание. Сделайте копию той части, которая должна была бы быть изменена при вычитании, и если вы обнаружите, что вы не можете осуществить вычитание, — возьмите сохраненное значение.
Головоломка 5.