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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dima24rus
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 8
#1

размещения - C++

26.10.2012, 17:44. Просмотров 705. Ответов 10
Метки нет (Все метки)

помогите с задачей
ввожу слово например:
ab
прога должа вывести:
a
b
ab
ba

может можно эту программу переделать, чтоб она выводила по одному, по два символа и т.д.
и чтоб ввод слова был с клавиатуры!

помогите пожалуйста!(
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <string>
#include <iostream>
 
int main()
{
    std::string s = "abc";
    std::sort(s.begin(), s.end());
    do {
        std::cout << s << '\n';
    } while(std::next_permutation(s.begin(), s.end()));
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
26.10.2012, 21:58     размещения #2
добавь после sort
C++
1
std::copy(s.begin(), s.end(), std::ostream_iterator<char>(std::cout, "\n"));
Будет выводить по 1му символу.
Ввод строки с клавиатуры тут в каждой третьей теме.
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
26.10.2012, 22:35     размещения #3
John Prick, для строки "abc" выводит только по одному и по три.
А по два нет.
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
26.10.2012, 22:37     размещения #4
Цитата Сообщение от Roof Посмотреть сообщение
А по два нет.
А как для строки abc должно выводить по 2?
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
26.10.2012, 22:55     размещения #5
Как я понимаю по два:
ab
ba
bc
cb
ac
ca

Ведь если для строки "abc" нужно по одному, то ведь и по два тоже должно быть нужно.
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
26.10.2012, 23:06     размещения #6
next_permutation применять не ко всей строке, а к части только для таких перестановок.

Добавлено через 1 минуту
потом делать циклический сдвиг на 1 и снова цикл перестановок.
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
26.10.2012, 23:07     размещения #7
Цитата Сообщение от John Prick Посмотреть сообщение
next_permutation применять не ко всей строке, а к части только для таких перестановок.
На это и хотел обратить внимание.
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
26.10.2012, 23:35     размещения #8
Чё-то даже как-то затянуло, хотя совсем не хотел студию запускать
Вариант "на скорую руку". Наверное, можно что-то подправить.
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>
#include <string>
#include <algorithm>
 
int main(void)
{
    std::string s = "abcd";
    std::sort(s.begin(), s.end());
    std::copy(s.begin(), s.end(), std::ostream_iterator<char>(std::cout, "\n"));
 
    std::string::iterator it = s.begin() + 1;
    do {
        unsigned int i = s.length();
        do {
            std::sort(s.begin(), it + 1);
            do {
                std::copy(s.begin(), it + 1, std::ostream_iterator<char>(std::cout, ""));
                std::cout << '\n';
            } while (std::next_permutation(s.begin(), it + 1));
            std::rotate(s.begin(), s.begin() + 1, s.end());
            --i;
        } while (i > 0);
        std::sort(s.begin(), s.end());
        ++it;
    } while (it != s.end() - 1);
 
    do {
        std::cout << s << '\n';
    } while (std::next_permutation(s.begin(), s.end()));
    system("pause");
}
dima24rus
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 8
27.10.2012, 09:41  [ТС]     размещения #9
Спасбо за помощь! только я не могу понять как исправить ошибку в последнем посте) помогите)
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
27.10.2012, 10:09     размещения #10
добавь #include <iterator>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2012, 12:23     размещения
Еще ссылки по теме:

C++ Варианты размещения восьми ферзей на шахматной доске
C++ Размещения с повторением
C++ Выписать все возможные размещения k из n предметов
Ошибка во время выполнения программы (размещения с повторениями) C++
C++ Правильность размещения трех видов скобок

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

Или воспользуйтесь поиском по форуму:
dima24rus
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 8
27.10.2012, 12:23  [ТС]     размещения #11
Спасибо боьшое! все работает)
Yandex
Объявления
27.10.2012, 12:23     размещения
Ответ Создать тему
Опции темы

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