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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2014, 20:37   #1
Лия123
Новичок
Джуниор
 
Регистрация: 17.11.2014
Сообщений: 1
По умолчанию помогите вывести все перестановки, алгоритм: с помощью двух массивов

Вывести все перестановки. Перестановки содержат в себе все элементы исходного множества и отличаются между собой лишь порядком элементов. Рекурсивные алгоритм предполагает поочередный подбор элементов в перестановку.

Рекурсивная функция будет иметь один целочисленный параметр: количество подобранных на данный момент элементов перестановки (назовем его «k»).

Чтобы элементы исходного множества (числа от 1 до n) не повторялись в одной перестановке мы будет использовать вспомогательную структуру (массив) для хранения информации об использовании элементов в перестановке. Если a[i] == 1 (или true) значит элемент уже используется в генерируемой перестановке, иначе a[i]==0.

Кроме того, нам потребуется массив b для хранений самой перестановки. Добавляя очередной элемент в перестановку, мы будем записывать его в позицию k, то есть b[k] = x. Где x новый элемент. Рекурсивная функция на псевдокоде:

функция «перестановки»(параметр k)

если k == n то (мы уже набрали достаточное количество элементов)

печатаем перестановку

выход из функции

перебираем все использованные в перестановке элементы

отмечаем выбранный элемент в массиве а, как занятый

добавляем выбранный элемент в массив b

запуск «перестановки»(k+1)

удаляем элемент из b

отмечаем выбранный элемент в массиве a, как свободный

текст моей неправильной программы:
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
int a[100], N=5;

void perestan(int k)
{
    int b[100];
    if (k==N) {
    for( int i = 0; i < N; i++ )
        cout << b[i] << " ";
    cout << endl;
    return;
    }
    
        for (int i=1; i<N; i++) {
            a[i]=1;
            b[k]=i;
            perestan(k+1);
            b[k]=0;
            a[i]=0;
        
        }
        
}

int _tmain(int argc, _TCHAR* argv[])
{
    int b[100], k;
    cout<<"Enter the k: "<<endl;
    cin>>k;
    for(int i=0; i<N; i++)
        cin>>a[i];
    cout<<endl;
    perestan(0);
    cin.get();
    return 0;
}

Последний раз редактировалось Stilet; 17.11.2014 в 23:20.
Лия123 вне форума Ответить с цитированием
Старый 17.11.2014, 22:30   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

надо было погуглить. 100500 ахулиардов примеров на всех языках программирования.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.11.2014, 23:24   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Э-э-э.... Я может ща глупость скажу, но перестановки это же сортировка пузырьком? Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2014, 23:33   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Не?
не !
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи на обработку одномерных массивов (помогите решить все на паскале ) Жаннулька Помощь студентам 9 21.01.2014 10:50
задан массив чисел из n элементов. вывести все возможные варианты перестановки из n элементов по m ( на паскале ) Sting707 Паскаль, Turbo Pascal, PascalABC.NET 2 11.03.2012 08:20
Вывести все буквы данного текстового файла, входящие в файл не менее двух раз. swillrocker Помощь студентам 0 10.06.2011 17:16
Множества. Вывести в алфавитном порядке все буква текста, входящие в него более двух раз ilyas22 Паскаль, Turbo Pascal, PascalABC.NET 5 23.05.2010 12:50
[Делфи]Как вывести из мемо все что есть (без циклов и массивов) zotox Помощь студентам 3 03.05.2009 20:25