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

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

Восстановить пароль Регистрация
 
dima24rus
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 8
26.10.2012, 17:44     размещения #1
помогите с задачей
ввожу слово например:
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
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
26.10.2012, 22:35     размещения #3
John Prick, для строки "abc" выводит только по одному и по три.
А по два нет.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
26.10.2012, 22:37     размещения #4
Цитата Сообщение от Roof Посмотреть сообщение
А по два нет.
А как для строки abc должно выводить по 2?
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
26.10.2012, 22:55     размещения #5
Как я понимаю по два:
ab
ba
bc
cb
ac
ca

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

Добавлено через 1 минуту
потом делать циклический сдвиг на 1 и снова цикл перестановок.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
26.10.2012, 23:07     размещения #7
Цитата Сообщение от John Prick Посмотреть сообщение
next_permutation применять не ко всей строке, а к части только для таких перестановок.
На это и хотел обратить внимание.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
27.10.2012, 10:09     размещения #10
добавь #include <iterator>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2012, 12:23     размещения
Еще ссылки по теме:

Функция размещения переменных в динамической памяти! C++
C++ Найти все варианты размещения знаков операций +,-,* на месте вопросов в выражении 1?2?3?4?5?6?7?8?9=100
Правила размещения объектов в памяти C++

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

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

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