Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсия 
:(
    Опции темы
Garcian
Дата 1.3.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте уважаемые программисты! С первым днем весны вас  smile . Ломаю голову над одной задачей на рекурсию, а именно "Напечатать все перестановки заданных n различных натуральных чисел", т.е. если даны числа "123", то кол-во возможных перестановок будет 3!=6. Вся проблема в том, что массив использовать запретили, а как сделать без него я не совсем представляю (зеленый еще). Помогите, пожалуйста.

--------------------
Неродивый студент
PM MAIL   Вверх
ex386
Дата 1.3.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может так? :

Код

#include <iostream>

long long fact(int k)
{
    if (k < 0) return 0;
    if (k == 0) return 1;
    return k * fact(k - 1);
}

int main()
{
    int a, b = 0;
    while ( (a = std::cin.get()) != '\n')
        if (a >= 48 && a <= 57)
            ++b;                            //количество цифр
    std::cout << fact(b);
}

PM MAIL   Вверх
mes
Дата 1.3.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



максимальное кол-во разрядов чисел известно ?

Добавлено через 1 минуту и 58 секунд
Цитата(ex386 @  1.3.2009,  12:58 Найти цитируемый пост)
Может так? :

думаю необходимо не  узнать кол-во перестановок, а определить все возможные:
Цитата(Garcian @  1.3.2009,  11:58 Найти цитируемый пост)
"Напечатать все перестановки заданных n различных натуральных чисел",




--------------------
PM MAIL WWW   Вверх
Garcian
Дата 1.3.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



mes, ты прав. Для того же случая с "123" в выходном файле должно быть "123 132 213 231 312 321"
--------------------
Неродивый студент
PM MAIL   Вверх
Dmi3ev
Дата 1.3.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

Вся проблема в том, что массив использовать запретили, а как сделать без него я не совсем представляю (зеленый еще)

а как с массивом, знаешь?  smile  


--------------------

PM MAIL   Вверх
mes
Дата 1.3.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



а как все таки насчет ответа на этот вопрос :
Цитата(mes @  1.3.2009,  13:04 Найти цитируемый пост)
максимальное кол-во разрядов чисел известно ?

?



--------------------
PM MAIL WWW   Вверх
Garcian
Дата 1.3.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у массива элементы свою область памяти хоть имеют, к ним обращаться проще. Не совсем  понял про разряды, здесь цифры как символы. На самом деле более четко задача звучит так "Напечатать все перестановки заданных n различных натуральных чисел (или символов)"

Это сообщение отредактировал(а) Garcian - 1.3.2009, 15:17
--------------------
Неродивый студент
PM MAIL   Вверх
mes
Дата 1.3.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Garcian @  1.3.2009,  14:16 Найти цитируемый пост)
n различных натуральных чисел (или символов)

переставлять надо числа или цифры каждого числа ?!

Цитата(Garcian @  1.3.2009,  14:16 Найти цитируемый пост)
. Не совсем  понял про разряды, здесь цифры как символы.

ну значит максимальное кол-во символов известно ?

Цитата(Garcian @  1.3.2009,  14:16 Найти цитируемый пост)
у массива элементы свою область памяти хоть имеют, к ним обращаться проще.

во первых как это поможет решить именно саму задачу ?
во вторых как хранятся n натуральных чисел, если не в массиве ?

Это сообщение отредактировал(а) mes - 1.3.2009, 15:25


--------------------
PM MAIL WWW   Вверх
math64
Дата 1.3.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Код

struct  used_numbers {
  int number;
  used_umber* prev_numbers;
};
void perestanovki(int n, used_numbers* used = NULL) {
  used_number num;
  int found_number = -1;
  num.prev_numbers = used;
  // поиск неиспользованного числа
  ...
  if (found_number == -1) {
    // распечатка найденной перестановки
    while (used != NULL) {
       printf (" %d", used->number);
       used = used->prev_numbers;
    }
    printf("\n");
  } else {
    num.number = found_number;
    presestanovki(n, &num);
  }
}

PM   Вверх
zim22
Дата 1.3.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(mes @  1.3.2009,  15:23 Найти цитируемый пост)
во вторых как хранятся n натуральных чисел, если не в массиве ?

можно "запаковать" два числа типа int в одно число типа double smile

Это сообщение отредактировал(а) zim22 - 1.3.2009, 15:49


--------------------
PM MAIL   Вверх
Dmi3ev
Дата 1.3.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Да это чистый развод, называется "Реши за меня"...  smile 
Давай свой вариант с массивами, если выдашь вариант с массивами, я обещаю, что в лепешку расшибусь, но сделаю без них...  smile 


--------------------

PM MAIL   Вверх
Garcian
Дата 1.3.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Аааа, да в этом весь прикол! Кол-во символов не больше 5, поскольку 5 - это уже 120 вариаций. 6 -720 и т.д.) Пространство std:: использовать тоже нельзя) Мы не доросли до такого) Во всяком случае надо использовать минимум 2 функции имхо. А массивов нет) 
зы: я не прошу в лепешку расшибаться кого-либо, мне нужен лишь дельный совет) Может даже с примером  smile 



Это сообщение отредактировал(а) Garcian - 1.3.2009, 15:57
--------------------
Неродивый студент
PM MAIL   Вверх
zim22
Дата 1.3.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



вот пример совета без примера:
Т.к. кол-во символов не больше пяти, создай пять переменных. Далее с помощью операции деления и остатка от деления выдели каждую цифру из числа. Занеси цифры в переменные. Тем самым ты обошёлся без массивов! Осталось только алгоритм перебора придумать.


--------------------
PM MAIL   Вверх
Soah
Дата 1.3.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Dmi3ev @  1.3.2009,  14:39 Найти цитируемый пост)
а как с массивом, знаешь?

Hапечатать все перестановки чисел 1..N

Предупреждаю, там на паскале.
PM MAIL   Вверх
math64
Дата 1.3.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



А структуры использовать можно? Если да - доработай мой код. Поиск неиспользованного числа нужно выставить в цикл, возможно для этого понадобится ещё одна рекурсивная функция, печатать можно тоже рекурсивной функцией.
Если символов не больше 64, можно использовать int64 как массив из 64 бит для запоминания использованных чисел.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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