Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2011, 13:22   #1
NanaTich
Новичок
Джуниор
 
Регистрация: 22.05.2011
Сообщений: 3
По умолчанию Генерация всех возможных вариантов

Подскажите, пожалуйста, функцию которая генерирует все возможные варианты перестановок 3х букв в слове из n букв.
Например, если слово из 4 букв, то количество перестановок должно быть 2^4, а вот как вывести все эти перестановки?
NanaTich вне форума Ответить с цитированием
Старый 22.05.2011, 14:16   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Простите, а почему 2^4 ? Вроде ж, 4! / (4-3)! - насколько я помню школьную комбинаторику...
Vago вне форума Ответить с цитированием
Старый 22.05.2011, 16:43   #3
NanaTich
Новичок
Джуниор
 
Регистрация: 22.05.2011
Сообщений: 3
По умолчанию

Sorry, ошиблась, правильнее будет 3^4, вот только надо функцию написать которая генерирует все возможные варианты
NanaTich вне форума Ответить с цитированием
Старый 22.05.2011, 17:10   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от NanaTich Посмотреть сообщение
...правильнее будет 3^4...
Правильнее, всё таки, будет четыре факториал делить на скобка открывается четыре минус три скобка закрывается факториал (если мы о перестановках говорим...)
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

a = ['1', '2', '3', '4']
k = 2
z = range( k )


def Pnm( a, j ):
    if j <= k:
        for i in range(0,len(a) ):
            z[j-1] = a[i]
            _a = []
            for l in range(0,len(a) ):
                if l != i:
                    _a.append( a[l] )
            Pnm( _a, j+1 )
    else:
        print z
        return

Pnm( a, 1 )

#
Vago вне форума Ответить с цитированием
Старый 22.05.2011, 17:14   #5
NanaTich
Новичок
Джуниор
 
Регистрация: 22.05.2011
Сообщений: 3
По умолчанию

не совсем поняла, можете обьяснить?
NanaTich вне форума Ответить с цитированием
Старый 22.05.2011, 17:28   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Что именно объяснить-то ? Или вы рекурсию ещё не учили? Вам, кстати, на каком языке это задали сделать?
Vago вне форума Ответить с цитированием
Старый 23.05.2011, 07:00   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Если последовательность не повторяющаяся, это легче сделать при помощи библиотеки STL (генераторы перестановок).
Заголовочный файл:
#include <algorithm>
Алгоритм:
Код:
namespace std;
template<class BidirectionalIterator>;
bool next_permutation(BidirectionalIterator first, BidirectionalIterator last);
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 23.05.2011 в 07:04.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комбинаторика. Получение возможных вариантов. Alex Cones Общие вопросы Delphi 3 16.01.2011 13:52
Перебор всех возможных вариантов phenix Помощь студентам 3 03.12.2010 21:29
сортировка данных (пересчет возможных вариантов комбинаций, перенос данных в таблицу) Vitalik85 Microsoft Office Excel 4 12.08.2009 00:30
Перебор всех возможных вариантов [MI_nor] Общие вопросы C/C++ 9 01.04.2009 21:17