0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13
1

Все возможные перестановки элементов заданного массива

06.02.2013, 20:52. Показов 39153. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите вывести на консоль все возможные перестановки элементов заданного массива
C++
1
void printPermutations (int items [ ], int itemsLength) { ... }
Пример (порядок вывода результатов может отличаться):
C++
1
2
3
4
5
6
7
8
int numbers[ ] = {1, 2, 3};
printPermutations (numbers , 3);
123
132
213
231
312
321
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2013, 20:52
Ответы с готовыми решениями:

Все возможные варианты перестановки символов строки
Дана строка s, состоящая из n символ (n меньше 6) составить все возможные варианты перестановки...

Вывести все возможные перестановки слов в предложении
С клавиатуры пишем предложение. Вывести все возможные перестановки тех слов в этом предложении,...

Рекурсивная функция: все возможные перестановки символов строки
Дана строка с n элементами. Например abs. Надо выводить все возможные варианты например abs asb...

Вывести все возможные перестановки букв в слове 'перепел'
Вывести все возможные перестановки букв в слове 'перепел' и посчитать их кол-во.

20
1 / 1 / 2
Регистрация: 06.02.2013
Сообщений: 43
06.02.2013, 22:08 2
Все возможные перестановки элементов заданного массива, ето количество елементов поднесенное к факториалу.
Тоесть если масив состоит из 5 елементов, то нужен факториал 5. Формула: !5=1*2*3*4*5;
0
385 / 362 / 109
Регистрация: 03.02.2013
Сообщений: 1,109
06.02.2013, 22:23 3
Цитата Сообщение от Veselchak Посмотреть сообщение
Все возможные перестановки элементов заданного массива, ето количество елементов поднесенное к факториалу.
Тоесть если масив состоит из 5 елементов, то нужен факториал 5. Формула: !5=1*2*3*4*5;
человек спросил не количество возможных перестановок, а сами перестановки...
по теме - если никто не опередит, сейчас набросаю код, как доделаю по работе один момент

Добавлено через 10 минут
прошу

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <algorithm>
#include <iterator>
#include <vector>
#include <iostream>
 
using namespace std;
 
void printPermutations (int items [], int itemsLength)
{
    vector<int> v;
    for (int i=0; i!=itemsLength; ++i) v.push_back(items[i]); 
 
    while (next_permutation(v.begin(), v.end() ) ) 
    { 
        copy(v.begin(), v.end(), ostream_iterator<int>(cout, ""));
        cout << endl;
    }
}
 
 
int main() 
{ 
    
    const int sizeArray = 3;
    int Array [sizeArray] = {1,2,3};
    
    printPermutations(Array,sizeArray);
    
    return 0;
}
4
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13
06.02.2013, 22:33  [ТС] 4
Спасибо
0
1 / 1 / 2
Регистрация: 06.02.2013
Сообщений: 43
06.02.2013, 22:44 5
Виноват))
0
4055 / 3309 / 924
Регистрация: 25.03.2012
Сообщений: 12,451
Записей в блоге: 1
06.02.2013, 22:45 6
Цитата Сообщение от abit Посмотреть сообщение
next_permutation(
Что это за функция такая? Что это за язык? Здесь раздел С++!
Моё решение на С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
void solve(int items [], int size, int l=0){
    int i;
    if (l==size){
        for (i=0; i<size; i++)
          printf("%d ", items[i]);  
        putchar('\n');
    }
    else
        for (i=l; i<size; i++){
            if (l^i){
                 items[l]^= items[i];
                 items[i]^= items[l];
                 items[l]^= items[i];
                 solve(items, size, l+1);
                 items[l]^= items[i];
                 items[i]^= items[l];
                 items[l]^= items[i];
            }else
                solve(items, size, l+1);
        }
}
int main(int argc, char *argv[]){  
    int arr[]={1, 2, 3, 4};
    solve(arr, 4);
    return 0;
}
ИМХО лучше читаемо
0
385 / 362 / 109
Регистрация: 03.02.2013
Сообщений: 1,109
06.02.2013, 22:54 7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Что это за функция такая? Что это за язык? Здесь раздел С++!
значит, боюсь, вы не совсем знаете язык C++...

можете убедиться это работает - http://liveworkspace.org/code/375xm7$0

про функцию почитайте тут - http://cplusplus.com/reference... ermutation

и прекратите изобретать велосипеды, всё уже давно придумано, учите С++, раз знаете, что находитесь в разделе С++
0
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
06.02.2013, 22:54 8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Что это за функция такая? Что это за язык? Здесь раздел С++!
Моё решение на С++:
Я вас огорчу но Вам в раздел : "Основы С"

Пример выше симпотишный и довольно изящный )
0
3973 / 2882 / 672
Регистрация: 08.06.2007
Сообщений: 9,708
Записей в блоге: 4
06.02.2013, 22:57 9
Тупой нерекурсивный вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
int main()
{
    const int n=4;
    int a[n];
    int i,j,k,i1,i2;
    int temp;
    for(i=0; i<n; i++) a[i]=i+1;
    for(;;) {
        for(i=0; i<n; i++) cout << a[i] << " ";
        cout << '\n';
        for(j=n-1; j>0; j--)
            if(a[j]>a[j-1]) break;
        if(j==0) return 0;
        j--;
        for(k=n-1; k>j; k--) {
            if(a[k]>a[j]) {
                temp=a[k];
                a[k]=a[j];
                a[j]=temp;
                break;
            }
        }
        for(i1=j+1,i2=n-1; i1<i2; i1++,i2--) {
            temp=a[i1];
            a[i1]=a[i2];
            a[i2]=temp;
        }
    }
}
2
4055 / 3309 / 924
Регистрация: 25.03.2012
Сообщений: 12,451
Записей в блоге: 1
06.02.2013, 23:14 10
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Я вас огорчу но Вам в раздел : "Основы С"
Мой ответ на С++. На Си бы не скомпилировалось. И я ничуть не огорчился бы, даже если это было так.

Цитата Сообщение от abit Посмотреть сообщение
значит, боюсь, вы не совсем знаете язык C++...
Это не значит, что совсем не знаю. Нет, этот пример с использованием <algorithm> ещё что... а вот некоторые вообще всякую экзотику вроде boost используют, словно эта библиотека часть C++!!!
0
abit
06.02.2013, 23:27
  #11

Не по теме:


Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это не значит, что совсем не знаю. Нет, этот пример с использованием <algorithm> ещё что... а вот некоторые вообще всякую экзотику вроде boost используют, словно эта библиотека часть C++!!!
boost это конечно хорошо, но STL уже давно входит в С++...
я если Вас задел, извините...
дело обстояло так, что я совсем недавно стал учить С++, до этого был fasm, FPC и Haskell, точнее - даже месяца не прошло, как я купил свою первую книжку по С++ и знакомый программист мне посоветовал брать сразу STL и Qt... я залпом и стал читать книги Cкотта Мейерса (ибо очень интересно), поэтому в базовом языке C - я очень слаб (

0
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
06.02.2013, 23:36 12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
printf("%d ", items[i]); *
* * * * putchar('\n');
Старый сишный стиль вывода. Я не говорю +/- я говорю что это Си. Любую книгу можете открыть и увидите там это.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
#include <stdio.h>
#include <cstdio> - вот хидер С++
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
int items []
Давайте в рекурсивной функции на стеке копии массивов создавать =)
0
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
06.02.2013, 23:39 13
разработчики дума 3 вообще не юзали стл и шаблоны. Они ,,изобретали велосипеды,, для конкретных задач.
0
4055 / 3309 / 924
Регистрация: 25.03.2012
Сообщений: 12,451
Записей в блоге: 1
06.02.2013, 23:49 14
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Давайте в рекурсивной функции на стеке копии массивов создавать =)
не надо тут про копию на стеке. всё по указателю передаётся. Не думаешь же ты, что в стек запихивается неизвестное количество элементов массива неизвестной величины.

Добавлено через 2 минуты
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Старый сишный стиль вывода. Я не говорю +/- я говорю что это Си. Любую книгу можете открыть и увидите там это.
В каком году его признали устаревшим, можно уточнить? Да и не забывай, что язык "Си" вообще, безотносительно ввода/вывода, сейчас повсюду используется и сдавать позиции не намерен.
0
abit
06.02.2013, 23:58
  #15

Не по теме:


Цитата Сообщение от coloc Посмотреть сообщение
разработчики дума 3 вообще не юзали стл и шаблоны. Они ,,изобретали велосипеды,, для конкретных задач.
не уловил связь с doom 3...
дай мне 10 нормальных программистов, 2-3 дизайнеров и 1 сценариста, 5-6 лет, и приличный бюджет, чтобы содержать эту команду, я тебе забацаю аналог дум-3 не то что без STL - а на ассемблере, но когда речь идёт о простых задачах, лучше пользоваться общепринятыми и проверенными инструментами, это быстрее, удобнее и проверенно... всё же вы не разработчик дум-3, чтобы плевать на стандарты

0
HighPredator
06.02.2013, 23:58
  #16
 Комментарий модератора 
Господа, от темы не отклоняйтесь.
0
3973 / 2882 / 672
Регистрация: 08.06.2007
Сообщений: 9,708
Записей в блоге: 4
07.02.2013, 00:46 17
Я думаю, что если задача учебная, то не стоит использовать уже изобретенный велосипед.
Цель задачи - научить изобретать, а обучение как раз и начинают с велосипедов.
Сколько разных задач проходит на тему сортировки, но никто ведь не предлагает решать их с использованием функции sort, которая уже написана и имеется в библиотеках си.
1
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
07.02.2013, 00:50 18
Цитата Сообщение от palva Посмотреть сообщение
Я думаю, что если задача учебная
Тогда ее надо решать а не на форум постить!
0
3973 / 2882 / 672
Регистрация: 08.06.2007
Сообщений: 9,708
Записей в блоге: 4
07.02.2013, 01:21 19
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Тогда ее надо решать а не на форум постить!
Вы как всегда правы. Чтобы возместить автору тот вред, который я ему нанес, выложив свой код, предложу ему изучить статью, которая объясняет алгоритм. http://window.edu.ru/resource/... 3_2_84.pdf
1
385 / 362 / 109
Регистрация: 03.02.2013
Сообщений: 1,109
07.02.2013, 04:25 20
Цитата Сообщение от palva Посмотреть сообщение
Вы как всегда правы. Чтобы возместить автору тот вред, который я ему нанес, выложив свой код, предложу ему изучить статью, которая объясняет алгоритм. http://window.edu.ru/resource/... 3_2_84.pdf
кстати, спасибо, отличная статья!
0
07.02.2013, 04:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2013, 04:25
Помогаю со студенческими работами здесь

Все возможные перестановки букв слова - нужен алгоритм
Доброго времени суток, форумчане. Помогите пожалуйста найти/составить алгоритм решения следующей...

Все возможные суммы элементов массива
Нужно сформировать все возможные суммы массива размерностью N Для массива 1 3 5 Результат 4 6 8 9...

Все возможные комбнинации элементов массива
Всем привет! Есть массив char array (s - размер массива). Нужно написать прогу, которая выведет...

Вывести на экран все возможные перестановки введенных ползователем символов
С клавиатуры задается последовательность символов. Написать программу, которая выводит на экран все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru