|
|
|
MarMar |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.6.2016 Репутация: нет Всего: нет |
Добрый день.
Подскажите, не могу понять, где собака зарыта. Задача выглядит как обычная олимпиадная для школьников, но тем не менее. Даны начальные значения A = 0, Z = 1. Также две команды A: A = 2 * A - Z Также две команды Z: Z = 2 * Z - A На вход дают число N, и надо сделать так, чтобы из начальных значений A = 0, Z = 1 с помощью выше обозначенных команд (A,Z) дойти до N, при чем не важно, кто из переменных А, Z дойдет первым до N, т.е.: N = 21 Начальные значения: A = 0, Z = 1 Команда А: А = -1; Z = 1 Команда А: А = -3; Z = 1 Команда Z: А = -3; Z = 5 Команда А: А = -11; Z = 5 Команда Z: А = -11; Z = 21 Предполагается, что можно написать функцию, для произвольного N, но ,конечно же, могут быть такие N, к которым не сойтись. Это сообщение отредактировал(а) MarMar - 18.6.2016, 20:36 |
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Решения пока нет, но вот пара утверждений
- если оба числа A и Z - попарно четные или нечетные, то применение любой операции A или Z оставит их четными или нечетными, соответственно. Отсюда следует, что решение для нечетных чисел должно начинаться с операции A - выходим к комбинации {-1,1} ; решение для четного числа - с операции Z - {0,2} - С этой стартовой позиции мы можем получить пару чисел - отрицательное -положительное, либо, применяя только Z - { 0, `2 в степени`}, После применения А получим пару разнознаковых чисел. Итого, если требуется найти положительное число - "достигнуть его" способно только Z. Отрицательное решение будет только А. - если число A меньше нуля, а Z - больше нуля, то любая операция А или Z не изменит знак чисел А и Z результата, а только сделает его бОльшим по модулю. Очень похоже, что если для какого то числа и можно получить решение - оно будет кратчайшим. Скорость увеличения модуля довольно велика, так что действительно, все возможные числа получить, вероятнее всего, не выйдет. P.S. В последней строке приведенного решения для 21 - ошибка. Число `-12` нужно заменить на `-11` -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
MarMar |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.6.2016 Репутация: нет Всего: нет |
Да, там ошибка, Спасибо! Рассуждения, может, и верны, но начальные значения даны именно "разномастные": чет и нечет) Мне,вроде, один человечек ответил. Сейчас посмотрю, если окажется верным, и пойму, то могу сюда выложить ради интереса!) |
|||
|
||||
ksnk |
|
|||
прохожий Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Если на javascript описать, то решение вот такое
http://output.jsbin.com/jovijorayi или http://jsbin.com/jovijorayi/edit?html,output Это сообщение отредактировал(а) ksnk - 20.6.2016, 11:41 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |