Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, мыщъх, Вы писали:
ПМ>ИМХО нет смысла давать получасовую задачу, особенно если в процессе её решения не о чем разговаривать с кандидатом. Задача неразрешима, если число — 0.
в этом случае функции next_bigger_num(x)/prev_lower_num(x) должны вернуть ошибку, не?
> Ближайшее большее — сдвиг исходного числа на один бит влево,
> зануление всех бит, кроме самого старшего, установка n — 1 младших бит
чего-чего?! мы начинаем двигать самый младший бит влево до тех пор, пока на следующей позиции не окажется нуль.
или нет, даже не так. если представить биты в виде строки, для удобства инвертированной слева-направо. и нужно найти первый '1+0', после чего заменить его на '01+' (регулярна в псевдофрме).
осталось только записать решение, используя сложение, вычитание, свдиг, or, and, xor и чего еще душе угодно. и вот как его записать я не так долго думал, как отлаживал. сначала наплодил кучу промежуточных переменных, а когда стал их "сворачивать", где-то лажанулся и долго ходил кругами.
М>>предлагаю дать задачу сравнения двух деревьев. а разворот списка это, извините, в детсад и на горшке сидеть.
ПМ>Нам бы хоть так...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.