![]() |
|
Модераторы: bsa |
![]()
|
|
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Здравствуйте уважаемые программисты! С первым днем весны вас
--------------------
Неродивый студент |
|||
|
||||
| ex386 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 27.2.2009 Репутация: нет Всего: нет |
Может так? :
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
mes, ты прав. Для того же случая с "123" в выходном файле должно быть "123 132 213 231 312 321"
--------------------
Неродивый студент |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
а как с массивом, знаешь? -------------------- |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а как все таки насчет ответа на этот вопрос :
? |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
у массива элементы свою область памяти хоть имеют, к ним обращаться проще. Не совсем понял про разряды, здесь цифры как символы. На самом деле более четко задача звучит так "Напечатать все перестановки заданных n различных натуральных чисел (или символов)"
Это сообщение отредактировал(а) Garcian - 1.3.2009, 15:17 --------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
переставлять надо числа или цифры каждого числа ?! ну значит максимальное кол-во символов известно ?
во первых как это поможет решить именно саму задачу ? во вторых как хранятся n натуральных чисел, если не в массиве ? Это сообщение отредактировал(а) mes - 1.3.2009, 15:25 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
можно "запаковать" два числа типа int в одно число типа double Это сообщение отредактировал(а) zim22 - 1.3.2009, 15:49 |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
Да это чистый развод, называется "Реши за меня"...
Давай свой вариант с массивами, если выдашь вариант с массивами, я обещаю, что в лепешку расшибусь, но сделаю без них... -------------------- |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Аааа, да в этом весь прикол! Кол-во символов не больше 5, поскольку 5 - это уже 120 вариаций. 6 -720 и т.д.) Пространство std:: использовать тоже нельзя) Мы не доросли до такого) Во всяком случае надо использовать минимум 2 функции имхо. А массивов нет)
зы: я не прошу в лепешку расшибаться кого-либо, мне нужен лишь дельный совет) Может даже с примером Это сообщение отредактировал(а) Garcian - 1.3.2009, 15:57 --------------------
Неродивый студент |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
вот пример совета без примера:
Т.к. кол-во символов не больше пяти, создай пять переменных. Далее с помощью операции деления и остатка от деления выдели каждую цифру из числа. Занеси цифры в переменные. Тем самым ты обошёлся без массивов! Осталось только алгоритм перебора придумать. |
|||
|
||||
| Soah |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 6 Всего: 54 |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
А структуры использовать можно? Если да - доработай мой код. Поиск неиспользованного числа нужно выставить в цикл, возможно для этого понадобится ещё одна рекурсивная функция, печатать можно тоже рекурсивной функцией.
Если символов не больше 64, можно использовать int64 как массив из 64 бит для запоминания использованных чисел. |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Спасибо за предложение) Не совсем понимаю, как выделятся числа, но я попробую)
Добавлено через 4 минуты и 38 секунд math64, не не не, всего то 5й месяц обучения --------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вот тут пример, тоже по перестановкам : http://forum.vingrad.ru/index.php?showtopi...t&p=1723750 хоть и задание там несколько другое, но надеюсь получится переделать самому, так как ничего "необычного" в коде не использовано Это сообщение отредактировал(а) mes - 1.3.2009, 16:38 |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Особо не ломаем голову, а подключаем #include<algorithm> и юзаем функцию next_permutation, принимающую указатель на начало и конец диапазона. Функция делает перестановку в лексикографическом порядке (то есть каждая следующая перестановка больше предыдущей) и возвращает логическое значение (true, если перестановка не последняя. Значит можно запустить в цикле). Конечно, исходный диапазон перед перестановками сортируем по возрастанию. Нельзя использовать массив - читаем входные данные в string (внутри это конечно массив, но извне - объект строка). Кстати, количество перестановок не обязательно равно n!. например число 112 - три возможных значения.
|
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
от хранения цифр никуда не деться... поэтому глупое требование, чтобы без массива, все равно в той или иной степени, будет массив, или это будет строка символов (что тоже массив), или это будет файл, в котором записаны символы, что тоже массив, либо будет указатель и будет выделяться паямять, что тоже вроде массива, либо будут пять переменных, что тоже несильно отличается от массива... хз, ща в тупую ломану, посмотрю, может че в голову придет оп дороге...
-------------------- |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Вероятно можно и без массива. например, из данного числа, путём математических действий, получить большее, но состоящее из тех же цифр, затем ещё и ещё, пока не получен максимум. Нужно только вывести формулу, но это к математикам.
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
если я правильно понял, то
Это сообщение отредактировал(а) mes - 1.3.2009, 17:25 |
||||
|
|||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
в голову ничего не пришло, что могло бы избавить от массива...
вот вариант в тупую, без массива, но с указателем...
Это сообщение отредактировал(а) Dmi3ev - 1.3.2009, 17:30 -------------------- |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вряд ли так как |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
представляю возмущение преподавателя: "А это что такое? Массив? Я же предупреждал тебя! Всё, ты отчислен!" и если пространоство std использовать нельзя, то что мешает его не использовать, а копировать из него необходимые функции? ещё можно функцию swap применить для двух случайных цифр из числа. полученное новое число сохраним в списке. снова применим функцию swap. пройдёмся по списку. если числа нет такого - добавим его в список. я думаю за миллион итераций все перестановки как раз и нагенерируются. Это сообщение отредактировал(а) zim22 - 1.3.2009, 18:21 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Ну за 5 месяцев мможно было бы научиться работать с массивами и указателями.
Здесь требуется доступ ко всем предыдущим итерациям и без массива или списка не обойтить. Массивы монжно скрыть в числах: long (32 Битный) - 9 десятичных цифр, до n=9 int64 - 16 шестнадцатиричных цифр, до n=16 Если требуется рекурсивный алгоритм, данные лучше хранить в списке, в классическом языке использующем рекурсию ЛИСПе данные тоже хранятся в списках.
Можно обойтись и без структур, используя функции с переменным числом агрументов (...) |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Dmi3ev, а где здесь рекурсия, помимо факториала (по ходу нет)?
Albor, мда, в самом деле, зачем голову ломать, преподаватель дурачок ничего не понимает --------------------
Неродивый студент |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а где в задании говорится об решении через рекурсию ? кроме упоминания в названии темы (что говорит лишь о Вашем предположении о способе решения), я иных указаний не нашел. Добавлено через 1 минуту и 49 секунд да и вобще как можно спрашивать решение, когда само задание (может и ошибаюсь) полностью не освещено ?! |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Кто сказал о дурачке? Тебе предложили варианты - выбирай. Когда-то и нам задавали такую задачу, но массивы не запрещались. Перерыв кучу информации по алгоритмам такого рода задача была решена, а, через какое-то время, заглянул в STL и та же задача решилась в несколько строк кода. Успехов. PS Если преподавателю представить хоть какое-то решение, думаю, что это уже +. |
|||
|
||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
а где спасибо... в задании действительно нигде не сказано, где должна быть рекурсия, и должна ли она быть... так что будь недоволен только собой, не только не справился с задачей, но даже не смог ее нормально сформулировать... слушай, что mes говорит...
это 99% успеха, а когда оно размыто, как в твоем случае, мы сами выпытываем у тебя что можно, что нужно... и советы: 1) ты должен быть доволен и такому коду... потому как своего никакого нет... 3) ты можешь потратить свое драгоценное время и увидеть некое сходство в последовательных шагах, и выделить их в рекурсивную функцию... или не можешь))) дело за тобой))) -------------------- |
||||
|
|||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Dmi3ev, спасибо, а где второй пункт
В задании не указано, но рекурсия обязательна (в следующий раз буду уточнять). Вообще это заданиие из таких типов, как "анализатор скобок" например. Сегодня еще раз спросил у препода насчет массивов - сказал нельзя! На вопрос " А как тогда?", он ехидно ответил "Не знаю". зы: не я же задачи эти придумываю) Чтоб его понять я несколько дней потратил) зыы: преподаватель даже не смотрит решение, если хоть что то не так)) Максимум укажет ошибку (что редко), а сам скажет - думайте дальше Это сообщение отредактировал(а) Garcian - 2.3.2009, 17:33 --------------------
Неродивый студент |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
у тебя одного в группе такое задание? нельзя спросить у однокурсников как они решили? |
|||
|
||||
| Dmi3ev |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
ну тогда и ты прояви чудеса хитрости: 1) пять переменных объяви, по сути это не есть массив 2) пользуйся указателем, как в моем примере, тоже можно преподу втереть, что это не есть массив 3) объяви переменную типа long int и запихни туда свои цифры (пять цифр туда поместятся), а получай их, пользуясь остатком от деления: long int x=12345; //x%10 только сегодня выкладывал
это для понимания... 4) из файла читай, тоже не массив будет 5) тебе говорили про строки string, тоже возьми на заметку вариантов куча, а потом просто объясни преподу, в чем разница между выбранным тобой вариантом и массивом (предварительно почитав), чтобы он точно не пенился))) Добавлено через 3 минуты и 43 секунды
посчитал нужным его убрать из вежливости... дабы не обидеть... -------------------- |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
боюсь тс нужно всего лишь переставить цифры в числе, именно поэтому массив сущность излишняя, так как переменная уже хранит все данные. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
я плакалъ! Ну нафлудили!
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
bsa, +1, действительно удовлетворяет всем условиям задачи. Массива нет никак (только если рассматривать целое число как массив бит
Лично мне вариант очень понравился. |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
а если на тип int посмотреть вот так
уж не массив ли это char-ов? Это сообщение отредактировал(а) Albor - 3.3.2009, 00:05 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Про битовый массив я уже написал. Тем не менее, если не доводить до маразма, то вариант действительно отличный. Я думаю, препод именно это имел ввиду - дотумкает ли до использования чистой математики или пойдет по пути строки. Лично я бы по причине своей лени пошел бы наверное по пути строки. И скорее всего схлопотал бы пару. Это сообщение отредактировал(а) Anikmar - 3.3.2009, 00:06 |
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Если есть ограничение на число n (n<10 или n<16), то как я уже говорил, int32 можно использовать для хранения 9 десятичных цифр, а uint64 для хранения 16 шестнадцатиричных цифр:
Но с использованием структур ограничений на n нет (если обеспечить достаточный размер стека) Добавлено через 6 минут и 45 секунд Albor: string условию не удовлетворяет, нельзя использовать std:: Но обычные строки ("") по-видмому можно, иначе как печатать результат? (ostream тоже в std::, так что printf) |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а если сказано в условии, что функции не использовать нельзя, то как писать программу ?! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
math64, читай условие внимательно - он сказал, что число разрядов не более пяти.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Ну для 5 хватит 5 восьмиричных цифр в int16
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
восьмиричных ?! a почему бы сразу не использовать тогда char для 5ти двоичных ? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Нужно запоминать не только набранные числа, но и их порядок, поэтому хранение в битах не годится.
у bsa действительно лучшее решение, правда нет проверки того, что в введённом числе есть одинаковые цифры. И насколько я понимаю, ostream нужно переделать на printf(), Его можно переделать и для шестнацатиричных чисел. |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
bsa, спасибо большое! Что касается проверки на повторяющиеся символы, имхо, она не нужна. Идет проверка только на пустой файл и на его отсутствие. Еще вопрос: что значит static_cast<int> и flush? Albor, string нельзя использовать точно) Зато его дали для следущей работы на подстроки --------------------
Неродивый студент |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
log10(n) даст тотже самый результат. static_cast<int> - приведение типа, говорит компилятору (в данном контексте) :" не ругайся, я знаю что из double получаю int" Это сообщение отредактировал(а) Albor - 5.3.2009, 13:37 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Может прежде, чем задавать вопросы, стоит воспользоваться гуглом? Про std::flush написано здесь: http://www.cplusplus.com/reference/iostream/manipulators/ |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Albor, спасибо. В гугле можно, но со слов понятней намного) Вот: "не ругайся, я знаю что из double получаю int" - сразу понятно в чем "фишка"
*********** посмотрел ссылку-все понятно. В следущий раз буду к гуглу обращаться, потом к вам. Это сообщение отредактировал(а) Garcian - 5.3.2009, 19:48 --------------------
Неродивый студент |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
![]()
|
| Правила форума "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. |