Тема: Программистские головоломки. |
sysadmin
Бывший океанец
Сообщений: 9819459
|
|
Delis
Юнга
Сообщений: 28
|
|
Кот Матроскин
Бывший океанец
Сообщений: 9819459
|
Рассмотрим следующий алгоритм генерации последовательности чисел.
Начнем с целого числа n. Если n четно, то поделим на 2. Если n нечетно, то умно-
умножим на 3 и добавим 1. Будем повторять этот процесс с новым полученным n, пока n не станет равным 1. Например, для n = 22 будет сгенерирована следующая
последовательность чисел:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
Полагают (но это еще не доказано), что этот алгоритм сведется к n = 1 для
любого целого n. По крайней мере, это предположение верно для всех целых
чисел до 1 000 000.
Для данного n длиной цикла n будем называть число сгенерированных чисел
до и включая 1. В примере, приведенном выше, длина цикла 22 равна 16. Для двух
заданных чисел i и j вы должны определить максимальную длину цикла для всех
чисел между i и j, включая обе конечные точки.
Входныe данные
Входные данные будут состоять из серии пар целых чисел i и j, одна пара
чисел в строке. Все целые числа будут меньше 1 000 000 и больше 0.
Выходные данные
Для каждой пары чисел i и j выведите i, j в том порядке, в каком они были вве-
введены, и после этого выведите максимальную длину цикла для всех целых чисел
между i и j, включая сами i и j. Эти три числа должны быть разделены одним про-
пробелом, все три числа в одной строке, и для каждой строки входных данных должна
быть одна строка выходных данных.
Пример входных данных--> Соответствующие выходные данные
1 10 --> 1 10 20
100 200 --> 100 200 125
201 210 --> 201 210 89
900 1000 --> 900 1000 174
|
|
|
29 Июля 2006 22:53 |
|
|
sysadmin
Бывший океанец
Сообщений: 9819459
|
|
AE_Corps
Бывший океанец
Сообщений: 9819459
|
|
non
Поручик
Сообщений: 1326
|
сегодня при подготовке к экзамену наткнулся на интересную задачу
char *c[] = {"ENTER", "NEW", "POINT", "FIRST"};
char **cp[] = {c+3, c+2, c+1, c};
char ***cpp = cp;
main()
{
printf("%s",**++cpp); /* (1) */
printf("%s",*--*++cpp+3); /* (2) */
printf("%s",*cpp[-2]+3); /* (3) */
printf("%s",cpp[-1][-1]+1); /* (4) */
}
я пропарился только с последним
|
|
|
22 Сентября 2006 00:02 |
|
|
_name_
Капитан 2го ранга
Сообщений: 3618
|
|
K_i_t
Бывший океанец
Сообщений: 9819459
|
|
sysadmin
Бывший океанец
Сообщений: 9819459
|
|
K_i_t
Бывший океанец
Сообщений: 9819459
|
|
sysadmin
Бывший океанец
Сообщений: 9819459
|
|
K_i_t
Бывший океанец
Сообщений: 9819459
|
sysadmin пишет: как неудачно < попал в цитату
Блин, ну что за "головоломка" превращать "больше" и "меньше" в "gt;" и "lt;" вместо тупого вырезания?!!!
К аффтару: можно человеческое описание задачи? Например, "сумма=100" - это условие или факт?
|
|
|
17 Октября 2006 14:19 |
|
|
sysadmin
Бывший океанец
Сообщений: 9819459
|
K_i_t пишет: Блин, ну что за "головоломка" превращать "больше" и "меньше" в "gt;" и "lt;" вместо тупого вырезания?!!!
К аффтару: можно человеческое описание задачи? Например, "сумма=100" - это условие или факт?
для меня использование именно такого фильтра тоже остаётся загадкой.
а у афтора простая задача. найти все числа от 1 до 91 произведение которых равно 100.
|
|
|
17 Октября 2006 14:22 |
|
|
K_i_t
Бывший океанец
Сообщений: 9819459
|
|
sysadmin
Бывший океанец
Сообщений: 9819459
|
|
K_i_t
Бывший океанец
Сообщений: 9819459
|
|
sysadmin
Бывший океанец
Сообщений: 9819459
|
K_i_t пишет: Все равно не понял условия. У него 10 чисел или все между 1 и 91? Ему нужны все комбинации что ли? Боюсь, я не доживу до того дня, когда на форумах научатся формулировать вопросы мало-мальски понятно
Все, больше в телепатии упражняться не буду.
что то типа 10+90=100, 11+89=100, 12+88=100 и т.д
соответственно
kn = [10,90], kn = [11,89], kn = [12,88]
ну это опять же как я задачу понял.
|
|
|
17 Октября 2006 14:50 |
|
|
_name_
Капитан 2го ранга
Сообщений: 3618
|
sysadmin пишет: что то типа 10+90=100, 11+89=100, 12+88=100 и т.д
соответственно
кн = [10,90], кн = [11,89], кн = [12,88]
ну это опять же как я задачу понял.
1. = Sum (kn) = 100 (dolzhna byt' rovna 100)
все комбинации это:
к1, к2, к3, к4, к5, к6, к7, к8, к9, к10
1,1,1,1,1,1,1,1,1,91
1,1,1,1,1,1,1,1,2,90
1,1,1,1,1,1,1,1,3,89
....
1,1,1,1,1,1,1,2,1,90
1,1,1,1,1,1,1,2,2,89
...
10,10,10,10,10,10,10
...
90,2,1,1,1,1,1,1,1,1
91,1,1,1,1,1,1,1,1,1
|
---------------------- |
рифмы в куче это классно
соберите рифмы в кучу |
|
|
17 Октября 2006 15:19 |
|
|
ship
Капитан 1го ранга
Сообщений: 5053
|
[quote=_name_][/quote]
у мнУ ужО есть такая программа, только она не допускает повторений... и написана в хм... [ABAP/4]...
точнее она просто выдает все возможне комбинации, а потом уже пробегаешься по значениям и смотришь подходит ли комбинация...
я тут ужО задавал как то похожий вопрос, но оказалось, что эффективный алгоритм для такого дела это целая проблема...так что делаем по старинке, перебором...
а посоветовали вот чего:
Цитата:
посмотри псевдополиномиальный алгоритм для тсп осниванный на "Bellmann'sche Optimalitätsgleichung"
а оригинальная тема тутА:
http://www.okean.de/forum/thread.php?id=42204&search=&type=Archive
|
---------------------- |
...one is the loneliest number...
Das Hohelied der Liebe
SAAB Saved!
4 8 15 16 23 42 |
|
|
17 Октября 2006 15:33 |
|
|
_name_
Капитан 2го ранга
Сообщений: 3618
|
|
---------------------- |
рифмы в куче это классно
соберите рифмы в кучу |
|
|
17 Октября 2006 15:38 |
|
|