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

Программа по резке труб - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить вектор сумм нечетных элементов четных строк матрицы целых чисел размером 6 × 6 http://www.cyberforum.ru/cpp-beginners/thread1785018.html
#include <iostream> #include <iomanip> using namespace std; int main() { int a, i, j; int v; cout << "Vvedite massiv:" << endl; for (i = 0; i < 6; i++) for (j = 0; j < 6; j++)
C++ Исправить ошибки в определении шаблона класса Подскажите пожалуйста как исправить эту ошибку template <class T> struct A { T x; }; template <class T> http://www.cyberforum.ru/cpp-beginners/thread1784972.html
Программа нахождения простых чисел C++
Я написал программу но в ней ошибка! Не пойму какая! Но мне важно понять как исправить именно эту прогу, знаю что есть другие проги на эту тему. #include<iostream> #include <iomanip> using namespace std; void main() { int f=0; int n=10;
Как в векторе объектов пользовательского класса изменить заданное поле у определённого элемента? C++
Добрый день. Создан вектор из структры: struct man { char name; int age; man(void) {} man(const char* hName, const int hAge) { strcpy(name, hName); age = hAge;
C++ С концами запутался с operator overloading http://www.cyberforum.ru/cpp-beginners/thread1784882.html
Всем привет. Тема operator overloading - моё слабое место, очень хочу разобраться. Читаю всякие статейки (могу скинуть ссылки, если нужно) + учебник для чайников, но эта тема слишком обширная: в одних источниках есть примеры о перегрузке при создании экземпляра класса, в других используют примеры с присваиванием, где-то мелькает "const", где-то "friend". Где-то передаётся параметр по ссылке...
C++ Skype API ошибка (_com_error_) Пытаюсь изучать Skype API: #import "Skype4COM.dll" int main() { CoInitialize(NULL); SKYPE4COMLib::ISkypePtr pSkype(__uuidof(SKYPE4COMLib::Skype)); подробнее

Показать сообщение отдельно
AVIK
12 / 12 / 5
Регистрация: 02.01.2014
Сообщений: 51
31.07.2016, 23:44     Программа по резке труб
есть у меня такой быдлокод в завалах, поанализируй Transposition build(boost::multiprecision::cpp_int number, int size), это оно (принимает номер перестановки и количество элементов в ней)

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <iterator>
#include <algorithm>
#include <cstdint>
 
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/lexical_cast.hpp>
 
class Transposition
{
private:
    std::vector<int> __data;
public:
    Transposition(std::vector<int> data) : __data(data) {}
    Transposition(): __data(std::vector<int>()) {}
    size_t get_size()
    {
        return __data.size();
    }
    std::vector<int> get_data()
    {
        return __data;
    }
    friend std::ostream & operator << (std::ostream & output_stream, Transposition & TR)
    {
        std::copy(TR.__data.begin(), TR.__data.end(), std::ostream_iterator<int>(output_stream, " "));
        return output_stream;
    }
    friend std::istream & operator >> (std::istream & input_stream, Transposition & TR)
    {
        std::copy(std::istream_iterator<int>(input_stream), std::istream_iterator<int>(), back_inserter(TR.__data));
        return input_stream;
    }
    friend bool operator == (Transposition & __1, Transposition & __2)
    {
        if(__1.get_size() != __2.get_size())
            return false;
        for(size_t i = 0; i < __1.get_size(); i++)
            if(__1.__data[i] != __2.__data[i])
                return false;
        return true;
    }
    friend bool operator < (Transposition & __1, Transposition & __2)
    {
        for(size_t i = 0; i < std::min(__1.get_size(), __2.get_size()); i++)
            if(__1.__data[i] < __2.__data[i])
                return true;
            else
                if(__1.__data[i] > __2.__data[i])
                    return false;
        return __1.get_size();
    }
    friend Transposition operator * (Transposition & __1, Transposition & __2)
    {
        std::vector<int> result_data(__1.get_size());
        for(size_t i = 0; i < result_data.size(); i++)
            result_data[i] = __1.__data[__2.__data[i] - 1];
        return Transposition(result_data);
    }
};
 
class TranspositionBulder
{
private:
    std::map<int, boost::multiprecision::cpp_int> factorial_cache;
    boost::multiprecision::cpp_int factorial(int d)
    {
        if(d <= 1)
            return boost::multiprecision::cpp_int(1);
        else
        {
            std::map<int, boost::multiprecision::cpp_int>::iterator iter = factorial_cache.find(d);
            if(iter != factorial_cache.end())
                return iter->second;
            else
            {
                factorial_cache[d] = d * factorial(d - 1);
                return factorial_cache[d];
            }
        }
    }
    std::vector<int> build_recursion(boost::multiprecision::cpp_int number, int size)
    {
        if(number >= factorial(size))
            return std::vector<int>(size, 0);
        if(size == 0)
            return std::vector<int>();
        else
        {
            std::vector<int> result, tmp;
            result.push_back(boost::lexical_cast<int>(number / factorial(size - 1)));
            tmp = build_recursion(number % factorial(size - 1), size - 1);
            std::copy(tmp.begin(), tmp.end(), std::back_inserter(result));
            return result;
        }
    }
 
public:
    Transposition build(boost::multiprecision::cpp_int number, int size)
    {
        std::vector<int> buffer = build_recursion(number, size);
        std::set<int> used;
        for(int i = 0; i < size; i++)
            used.insert(i);
        std::vector<int> result;
        for(int i = 0; i < size; i++)
        {
            std::set<int>::iterator it = used.begin();
            for(int j = 0; j < buffer[i]; j++)
                it++;
            result.push_back(*it);
            used.erase(it);
        }
        for(std::vector<int>::iterator it = result.begin(); it != result.end(); it++)
            (*it)++;
        return Transposition(result);
    }
    boost::multiprecision::cpp_int get_index(Transposition TR)
    {
        boost::multiprecision::cpp_int index = 0;
        std::vector<int> data = TR.get_data();
        for(size_t i = 0; i < TR.get_size(); i++)
        {
 
        }
        return index;
    }
};
 
Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru