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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать рекурсивную функцию перевода десятичного числа в двоичное и используя ее найти и вывести на печать двоичные коды первых 100 чисел Фибоначчи http://www.cyberforum.ru/cpp-beginners/thread1068403.html
Написать рекурсивную функцию перевода десятичного числа в двоичное и используя ее найти и вывести на печать двоичные коды первых 100 чисел Фибоначчи. Выводит числа Фибоначчи Нужно написать...
C++ Выполнить слияние двух рассортированных бинарных файлов в третий упорядоченный файл 1. Выполнить слияние двух рассортированных бинарных файлов в третий упорядоченный файл. Сортировок не использовать. Дополнительных массивов и файлов не использовать. http://www.cyberforum.ru/cpp-beginners/thread1068401.html
C++ Подобрать учебники
Подкиньте пару названий книг. Как разработать программы для сети.
C++ Индексация массивов, арифметика указателей
инициализирую одномерный массив и делаю на него указатель const int N = 6; int X = {9,3,2,3,6,8}; int *mas = X; затем хочу сделать вывод элементов массива for (int i=0; i<=N;...
C++ Вычислить НОК (наименьшее общее кратное) двух натуральных чисел A и B http://www.cyberforum.ru/cpp-beginners/thread1068388.html
Задача 7. Вычислить НОК (наименьшее общее кратное) двух натуральных чисел A и B.
C++ Вывести значения членов ряда, образованных геометрической прогрессией Задача 6. Написать алгоритм или программу, которая выводит значения членов ряда, образованных геометрической прогрессией. Начальный элемент ряда, шаг прогрессии, и количество элементов ряда вводятся... подробнее

Показать сообщение отдельно
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
11.01.2014, 15:01
Пример из поста
Алгоритм перестановок
переделанный под строки
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru