|
Рубрика X-Puzzle Иван Скляров Xakep, номер #050, стр. 050-110-1 Sklyarov@real.xakep.ru Не стесняйся присылать мне свои ответы, даже если ты смог ответить всего на один пазл, я с интересом почитаю твои оригинальные решения. Ну, а имена героев, которые первыми правильно ответят на все вопросы, конечно же, будут опубликованы в журнале, чем прославятся на всю Россию (и не только) и навечно войдут в историю Х. Приз за нами не заржавеет. ;) Но помни: в большинстве случаев вариант ответа засчитывается как правильный, только если к нему приложено подробное и ВЕРНОЕ объяснение, почему выбран именно этот вариант, а не какой-либо другой. ОТВЕТЫ К ПРЕДЫДУЩЕМУ ВЫПУСКУ X-PUZZLE Ответ на пазл #1 «Кривая Клава» В данном пазле, в общем случае, нужно решить две проблемы: 1. Обойтись при написании кода без цифр (1-8). 2. Обойтись без операции умножения (*) и без знака «#», т. е. без библиотеки математических функций (<math.h>), а значит, и без функции возведения в степень pow(). Первая проблема легко решается с помощью замечательного свойства языка C/C++, когда перед применением арифметических операций с символьными переменными все они преобразуются к типу int. Т.е., например, в результате выражения int Ten = 'K' - 'A'; мы получим число 10, т.к. десятичный ASCII-код буквы K=75, а буквы A=65. Во втором случае все операции умножения и функцию возведения в степень нужно заменить сложением, это легко проделать с помощью обычных циклов. Ниже показана реализация кода с учетом решения вышеназванных проблем: #include <iostream.h> main () { int n; int Ten = 'K' - 'A'; int Seven = 'H' - 'A'; int Four = 'E' - 'A'; int NewX; cout << "Введите предел:\n"; cin >> n; cout << "Результаты расчета уравнения:\n"; for (int x = -n; x <= n; x++) { int TenOnPow = 0; for (int CountTen = 0; CountTen < Ten; CountTen++) { int Pow = 0; x < 0 ? NewX = -x : NewX=x; for (int CountPow = 0; CountPow < NewX; CountPow++) Pow = Pow + NewX; TenOnPow = TenOnPow + Pow; } int SevenOnX = 0; for (int CountSeven = 0; CountSeven < Seven; CountSeven++) SevenOnX = SevenOnX + x; int y = TenOnPow + SevenOnX - Four; cout << y << endl; } return 0; } Ответ на пазл #2 «Голубая кровь» Логика в данном послании простая, каждое двоичное число представляет собой букву (символ) в кодировке Unicode. Т. е. если прочитать расшифрованную фразу слева направо и сверху вниз, то получится: «Следуй за белым кроликом» (Matrix). Соответственно, по смыслу несложно догадаться, что заляпанные Даниной кровью числа являются (по порядку): буквой «е» (10000110101), символом пробела (00000100000), буквой «ы» (10001001011) и буквой «м» (10000111100). Ответ на пазл #3 «Unreal’ные шахматы» Ни одна из приведенных позиций не может возникнуть в реальной шахматной партии по существующим шахматным правилам! Ниже приведены объяснения по порядку, начиная с первой позиции: 1. На доске присутствуют девять черных пешек, что в реальной шахматной игре невозможно. 2. Черный чернопольный слон не может находиться вне первоначального положения, т. к. черные пешки e7 и g7 не сделали еще ни одного хода! Конечно, можно было бы предположить, что слон был взят белым конем, а затем получен проведенной пешкой (напомню, что пешка, достигшая последней горизонтали, называется проведенной и может быть заменена любой фигурой своего цвета, кроме короля), но все восемь черных пешек присутствуют на доске. |