Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
tolkin
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 18
1

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

11.01.2014, 13:44. Просмотров 1566. Ответов 11
Метки нет (Все метки)

С клавиатуры задается последовательность символов. Написать программу, которая выводит на экран все возможные перестановки введенных символов.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2014, 13:44
Ответы с готовыми решениями:

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

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

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

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

Cтрока: вывести в файл все возможные сочетания символов начиная с A, и заканчивая строкой в 16 символов состоящую из Z
Изучая работу со строками в c++ столкнулся с задачей. Есть массив символов английского алфавита от...

11
sergei60
48 / 29 / 11
Регистрация: 10.06.2012
Сообщений: 395
11.01.2014, 13:59 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
#include <cstring>
 
void f(char*a);
int main()
{
    char str[]="vi na";
    f(str);
    puts(str);
}
void f(char*a)
{
    int l=strlen(a);    
for(int i=0;i<l;i+=2)
    {
        int t=a[i];
        a[i]=a[i+1];
        a[i+1]=t;
    }
}
может так ?
1
tolkin
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 18
11.01.2014, 14:24  [ТС] 3
Шас попробую

Добавлено через 17 минут
не работает
0
sergei60
48 / 29 / 11
Регистрация: 10.06.2012
Сообщений: 395
11.01.2014, 14:34 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <string>
#include <iostream>
 
int main()
{
    std::string s = "aba";
    std::sort(s.begin(), s.end());
    do {
        std::cout << s << '\n';
    } while(std::next_permutation(s.begin(), s.end()));
}
а так?
1
tolkin
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 18
11.01.2014, 14:42  [ТС] 5
о, спс))што зделать, штоб консоль сама не закривалась?

Добавлено через 5 минут
просто conio.h подключить?
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5119 / 1557 / 951
Регистрация: 23.01.2011
Сообщений: 3,188
Завершенные тесты: 1
11.01.2014, 14:43 6
C++
1
system("pause");
1
zss
Модератор
Эксперт С++
7949 / 7135 / 4451
Регистрация: 18.12.2011
Сообщений: 18,833
Завершенные тесты: 1
11.01.2014, 14:43 7
Цитата Сообщение от tolkin Посмотреть сообщение
штоб консоль сама не закривалась?
C++
1
2
system("pause");;
return 0;
1
tolkin
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 18
11.01.2014, 14:47  [ТС] 8
всьо, тепер норм)

Добавлено через 1 минуту
через conio. h тоже пашет

Добавлено через 1 минуту
а што здесь неправильно?хочу етот код розобрать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
#include <cstring>
 
void f(char*a);
int main()
{
    char str[]="vi na";
    f(str);
    puts(str);
}
void f(char*a)
{
    int l=strlen(a);    
for(int i=0;i<l;i+=2)
    {
        int t=a[i];
        a[i]=a[i+1];
        a[i+1]=t;
    }
}
0
sergei60
48 / 29 / 11
Регистрация: 10.06.2012
Сообщений: 395
11.01.2014, 14:58 9
tolkin, там прогамма работает правильно ,но не то находит что надо. Там меняются местами первый символ со вторым и третий с четвертым и так далее .Просто я сам ошибся с условием.
1
tolkin
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 18
11.01.2014, 15:00  [ТС] 10
ага, шас попробую исправить.
0
zss
Модератор
Эксперт С++
7949 / 7135 / 4451
Регистрация: 18.12.2011
Сообщений: 18,833
Завершенные тесты: 1
11.01.2014, 15:01 11
Пример из поста
Алгоритм перестановок
переделанный под строки
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
58
59
60
61
62
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <set>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string                  T_str;
typedef std::set<T_str::value_type>  T_dig_set;
//////////////////////////////////////////////////////////////////////////////////////
bool minimum_increasing_dig_swap(T_str  &s)
{
    bool  bool_res = false;
    if(s.size() <= 1) return bool_res;
    //Ищем, начиная с предпоследней, такую букву, справа от которой есть меньше нее.
    T_dig_set         tail_set;
    T_str::size_type  pos_L = s.size() - 1;
    do
    {
        tail_set = T_dig_set(s.begin() + --pos_L, s.end());
        bool_res = s[pos_L] != *tail_set.rbegin();    
    }while(   pos_L 
           && !bool_res);
 
    if(!bool_res)  return  bool_res;    
 
    //Ищем справа от s[pos_L] наименьшую букву, которая больше s[pos_L].    
    T_dig_set::const_iterator  dig_R_it  = tail_set.upper_bound(s[pos_L]);
    T_str::size_type           pos_R     = s.find(*dig_R_it, pos_L);
    //Переставляем буквы.
    std::swap(s[pos_L], s[pos_R]);
    //Сортируем хвост.
    std::sort(s.begin() + pos_L + 1, s.end());
    return  bool_res;    
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{    
    std::cout << "s = ";
    T_str s;
    std::cin>>s;
 
    int  counter = 0;
    while(minimum_increasing_dig_swap(s))
    {
        ++counter;
        std::cout << s
                  << std::endl;
    }
    if(!counter)
    {
        std::cout << "Such string doesn't exist."
                  << std::endl;
    }
    else
    {
        std::cout << "Total "
                  << counter
                  << " strings."
                  << std::endl;    
    }
    system("pause");
}
1
tolkin
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 18
11.01.2014, 17:17  [ТС] 12
всем спасибо)буду розбирать

Добавлено через 2 часа 0 минут
sergei60, в прототипе нельзя писать имя переменной, по-моему...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
#include <cstring>
 
void f(char*a);
int main()
{
    char str[]="vi na";
    f(str);
    puts(str);
}
void f(char*a)
{
    int l=strlen(a);    
for(int i=0;i<l;i+=2)
    {
        int t=a[i];
        a[i]=a[i+1];
        a[i+1]=t;
    }
}
0
11.01.2014, 17:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2014, 17:17

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

Рекурсия. Вывести на экран все перестановки чисел от 1 до n в лексикографическом порядке.
При помощи рекурсии по данному числу n выведите на экран все перестановки чисел от 1 до n в...

Массивы. Вычислить по формуле и вывести на экран все возможные комбинации сумм чисел
Доброго всем времени суток.Я делаю только первые шаги в программировании.Начал разбираться с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru