![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
nightspirit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
Всем доброго времени суток!
Есть такая проблемка: первое число-1234567,второе-7654321. Первое число состоит из пар цифр 12,23,34,45,56 и 67. Нужно взяв все пары поочередно,раскидать их по краям исходного числа(то есть беря первую пару,получим новое число 1345672,вторую пару-2145673,ну и т.д для всех пар). Для новых получиных чисел(в нашем случае 1345672,2145673 и т.д) проделать тоже самое,что и с исходным числом. Проделывать нужно этот алгоритм до тех,пока не наткнемся на число 7654321. В итоге работы получится что то вроде дерева с корнем 1234567. Получение новых чисел с помощью разброса пар по краям организовано,надо сделать сам поиск. Подскажите пожалуста,кто знает. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
как я понял, необходимое Вам решается рекурсией.
примерно так :
Это сообщение отредактировал(а) mes - 14.4.2009, 15:48 |
|||
|
||||
nightspirit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
mes,да все спасибо,она находит.А я там придумывал такие огромные ф-ии
![]() можно еще только один вопрос: как добавить сюда количество итераций,ну то есть не булевской ф-ия была а лонговской например. че то так и сяк попробывал,не идет... |
|||
|
||||
Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
так например? -------------------- ![]() |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
думаю так, проверяйте:
подправлено.. Добавлено @ 13:17 ![]() Добавлено @ 13:20 будет считать шаги только участка, а не всей ветки. Добавлено @ 13:21 а ее зачем вынесли из цикла ? Это сообщение отредактировал(а) mes - 14.4.2009, 15:49 |
|||
|
||||
Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
сорри, не стал углублятся в код, понатыкал сразу во всех return'ах))
чтоб вернуть её. Ну да, в данном случае можно всё сделать и внутри, но часто требуется работать с переменной после цикла. Обычно я такие счётчики выношу. Это сообщение отредактировал(а) Cheloveck - 14.4.2009, 13:32 -------------------- ![]() |
||||
|
|||||
nightspirit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
mes,че то не хочет,выдает Unhandled exception at 0x00411549 in obr.exe: 0xC00000FD: Stack overflow.
|
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Заменините рекурсивный вызов на int j = find_mutation (mutant, val); а то вы повторяете поиск с тем те числом
Но и после этой замениу в процессе перестановок можно вернуться к числу, которое уже было. Нужно запоминать опробованные числа Кроме того, это поиск в глубину, а автор хотел поиск в ширину. |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
решается путем разделения тела цикла на два (вначале склонился в пользу первого варианта, так как во втором будет немного повторений, а на слово из топика "ширина" не обратил внимания ![]()
![]() Добавлено @ 15:39
ага ![]() и еще инкрементация счетчика была забыта... ![]() ![]() Это сообщение отредактировал(а) mes - 14.4.2009, 15:54 |
||||
|
|||||
nightspirit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
mes,че то все равно тажа самая ошибка выскакивает,что стек переполнин...
|
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Я же сказал: нужно запоминать список использованных чисел:
|
|||
|
||||
nightspirit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
math64,а куда вставить used_numbers?
глупец я еще в с++ ![]() |
|||
|
||||
Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
В бесконечную рекурсию втулился, скорее всего. Код покажи, что бы не гадать на кофейной гуще. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
contains(numbers&, number) - проверка содержится ли number в векторе PS: Данных алгоритм остаётся поиском в глубину (хотя на глубину 1 производится предварительный поиск в ширину) и результат не обязательно кратчайший Это сообщение отредактировал(а) math64 - 16.4.2009, 11:44 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |