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

Не могу найти ошибку в коде, генерирующего всевозможные перестановки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Указатель на объект из указателя на член класса http://www.cyberforum.ru/cpp-beginners/thread1714236.html
Что как-то сей вопрос ставит меня в тупик. class A { int i; } obj; int main()
C++ Как процедуру в Паскале реализовать, как функцию в с++? Здравствуйте! Есть код на Паскале. Нужно процедуру реализовать в С++ как функцию. Возможно ли в моем случае? Попробовал по-всякому, но у меня выводит только единицы. program razbienie_mnozhestwa(input,output); var i,j,k,n:byte;wper:arrayof boolean; sled,pred,blok:arrayof byte; procedure write_razbienie; {процедура, выписывающая разбиение на экран} var i,j:byte; begin j:=1; {номер... http://www.cyberforum.ru/cpp-beginners/thread1714228.html
Как найти отношение 3-х, а ну двух чисел, между собой? C++
Допустим, если я хочу узнать, во сколько раз число A больше/меньше числа B, я просто разделю А на B (A/B), а что делать, если дано 3 числа? Дано: a, b, c Нужно вычислить какое - то одно число, которое бы говорило бы о степени взаимных отношений, то есть во сколько раз a,b и с больше или меньше сами себя что ли.. То есть для этих трёх должно быть одно число, которое бы харрактеризовало...
C++ Удалить из массива все нулевые элементы
Помогите кто знает. Пожалуйста. Сформировать и распечатать динамический одномерный массив( число элементов запросить у пользователя). Заполнить случайными числами от -5 до 5. Удалить из массива все нулевые элементы. Новый массив должен занимать столько памяти, сколько ему необходимо. Распечатать новый массив. Буду очень благодарен т
C++ Создать новую матрицу, скопировав её из исходной; заполнить 30% новой матрицы нулями в случайном порядке http://www.cyberforum.ru/cpp-beginners/thread1714185.html
Задание 3 скопировать 2-мерный массив и 30% чисел в нем заполнить нулями (в случайном порядке)
C++ Из заданного одномерного массива создать матрицу и заполнить её по условию Ребята,помогите пожалуйста Задание 2 Из полученного массива приложение создает 2-мерный массив, с размерностью первого массива (например первый массив получился из 10 элементов, значит 2-мерный будет 10х10) подробнее

Показать сообщение отдельно
Babysitter
80 / 107 / 35
Регистрация: 23.11.2015
Сообщений: 332
Завершенные тесты: 1
18.04.2016, 14:03
в общем, просто позора пост. думал сейчас потренеруюсь - сяду напишу, а сходу не написалось, времени мало было. в итоге для правильного порядка пришлось set доставать, делать жутко медленные вставки в вектор и на каждой итерации выбрасывать на свалку предыдущий сет.

удалять этого монстра все равно жалко, так что выкину сюда.
как люди до auto писали обмен местами содержимого двух итераторов?
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
#include <algorithm>
#include <iostream>
#include <vector>
#include <set>
 
typedef std::vector<int> Seq;
typedef std::set< Seq > SeqVec;
 
template <class Forward>
void tswap(Forward x, Forward y)
{
    auto tmp = *x;
    *x = *y;
    *y = tmp;
}
 
template <class Random>
void permute(Random beg, Random end, SeqVec& out)
{
    if (end - beg == 1)
    {
        out.emplace(Seq{ *beg });
        return;
    }
    tswap(min_element(beg, end), beg);
    permute(beg + 1, end, out);
    SeqVec result;
    for (Seq s : out)
    {
        for (size_t i = 0; i <= s.size(); ++i)
        {
            Seq tmp = s;
            tmp.insert(tmp.begin() + i, *beg);
            result.emplace(tmp);
        }
    }
    out = result;
}
 
int main()
{
    Seq v{ 5, 4, 3, 2, 1 };
    SeqVec result;
    permute(v.begin(), v.end(), result);
    for (auto i : result)
    {
        for (auto j : i)
            std::cout << j;
        std::cout << "\n";
    }
    return 0;
}
Добавлено через 14 минут
а, ну да. если сет уже есть, то пузырек на восходящей рекурсии не нужен тем более.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template <class Random>
void permute(Random beg, Random end, SeqVec& out)
{
    if (end - beg == 1)
    {
        out.emplace(Seq{ *beg });
        return;
    }
    permute(beg + 1, end, out);
    SeqVec result;
    for (Seq s : out)
    {
        for (size_t i = 0; i <= s.size(); ++i)
        {
            Seq tmp = s;
            tmp.insert(tmp.begin() + i, *beg);
            result.emplace(tmp);
        }
    }
    out = result;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru