Форум программистов, компьютерный форум CyberForum.ru

Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
k_ehgor
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 4
19.06.2013, 17:17     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. #1
Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
Ввод
В первой строке файла находится исходная строка.
Вывод
Вывести в каждой строке файла по одной перестановке. Перестановки можно выводить в любом порядке. Повторений и строк, не являющихся перестановками исходной, быть не должно.
Ограничения
2 ≤ M ≤ 8; символы - буквы латинского алфавита и цифры.
Пример:
Ввод: 123
Вывод: 321
213
132
312
231
123
Именно в таком порядке!!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2013, 17:17     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
Посмотрите здесь:

C++ Дана строка. Подсчитать, сколько различных символов встречается в ней. Вывести их на экран.
C++ Дана строка символов,состоящая из произвольного текста
C++ Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки- не работает
C++ Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки
Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
19.06.2013, 17:22     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. #2
Цитата Сообщение от k_ehgor Посмотреть сообщение
Перестановки можно выводить в любом порядке.
Цитата Сообщение от k_ehgor Посмотреть сообщение
Именно в таком порядке!!!!!
???
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
19.06.2013, 17:22     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. #3
не проверял
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
    std::string s;
    std::cin >> s;
    std::sort(s.begin(),s.end());
    do{
        std::cout << s << std::endl;
    }while (std::next_permutation(s.begin(),s.end()))
    return 0;
}
k_ehgor
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 4
19.06.2013, 17:26  [ТС]     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. #4
MrGluck, в задании сказано любым, а в примере именно так((
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
19.06.2013, 17:28     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. #5
Цитата Сообщение от k_ehgor Посмотреть сообщение
MrGluck, в задании сказано любым, а в примере именно так((
k_ehgor, вообще-то нужно решать так как сказано в задании, пример не важен, поскольку как я понимаю это олимпиадная задача
k_ehgor
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 4
19.06.2013, 17:29  [ТС]     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. #6
Спасибки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2013, 17:48     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
Еще ссылки по теме:

C++ Дана строка символов, состоящая из цифр и пробелов. Вывести на экран слово с максимальной длиной
C++ Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с четным количеством символов
C++ Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
19.06.2013, 17:48     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки. #7
k_ehgor, тогда так:
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
#include <iostream>
#include <clocale>
#include <algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    const int N = 4;
    int A[N]; // имеем множество A {1, ... N}
    int counter = 0; // счетчик числа перестановок
    for (int i = 0; i < N; i++) // заполняем множество
        A[i] = i + 1;
    // sort(A, A + N); // необходимо при вводе произвольных элементов
    do
    {
        for (int i=0; i < N; i++)
            cout << A[i] << ' ';
        cout << endl;
        counter++;
    } while (next_permutation(A, A + N));
    cout << "Всего перестановок: " << counter << endl;
    return 0;
}
Второй вариант без STL:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <clocale>
 
using namespace std;
 
// вывод множества на экран
void print(const int *A, const int size);
// функция перестановки двух чисел
void swap(int &, int &);
// функция генерации следующей перестановки
void next_perm(int k, int *A, const int size, int &counter);
 
 
int main()
{
    setlocale(LC_ALL, "");
    const int N = 4;
    int A[N]; // имеем множество A {1, ... N}
    int counter = 0; // счетчик числа перестановок
    for (int i = 0; i < N; i++) // заполняем множество
        A[i] = i + 1;
    next_perm(0, A, N, counter);
    cout << "Всего перестановок: " << counter << endl;
    return 0;
}
 
void print(const int *A, const int size)
{
    for (int i=0; i < size; i++)
        cout << A[i] << ' ';
    cout << endl;
}
 
void swap(int &x, int &y)
{
    int tmp = x;
    x = y;
    y = tmp;
}
 
void next_perm(int k, int *A, const int size, int &counter)
{
    // если заполнилось
    if (k == size)
    {
        print(A, size);
        counter++;
        return;
    }
 
    for(int i = k; i < size; i++)
    {
        swap(A[k], A[i]);
        next_perm(k + 1, A, size, counter); // следующая перестановка
        swap(A[k], A[i]);
    }
}
Yandex
Объявления
19.06.2013, 17:48     Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
Ответ Создать тему
Опции темы

Текущее время: 02:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru