Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти кратчайшую последовательность комманд 
:(
    Опции темы
MarMar
Дата 17.6.2016, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
ksnk
Дата 17.6.2016, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 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`




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
MarMar
Дата 18.6.2016, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.6.2016

Репутация: нет
Всего: нет



Цитата(ksnk @  17.6.2016,  22:40 Найти цитируемый пост)


P.S.  В последней строке приведенного решения для 21 - ошибка. Число `-12` нужно заменить на `-11`

Да, там ошибка, Спасибо!


Рассуждения, может, и верны, но начальные значения даны именно "разномастные": чет и нечет)

Мне,вроде, один человечек ответил. Сейчас посмотрю, если окажется верным, и пойму, то могу сюда выложить ради интереса!)
PM MAIL   Вверх
ksnk
Дата 19.6.2016, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Если на javascript описать, то решение вот такое
Код

           function convert(n) {
                if (n >= 0 && n < 2) {
                    return '';
                } else if (n > 0) {
                    return (n - 1).toString(2)
                            .split('').reverse().join('')
                            .replace(/1/g, 'Z').replace(/0/g, 'A');
                } else {
                    return (0 - n).toString(2)
                            .split('').reverse().join('')
                            .replace(/1/g, 'A').replace(/0/g, 'Z');
                }
            }


http://output.jsbin.com/jovijorayi
или 
http://jsbin.com/jovijorayi/edit?html,output


Это сообщение отредактировал(а) ksnk - 20.6.2016, 11:41


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0916 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.