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

Заданы цифры - расставить знаки сложения и вычитания так, чтобы получилось выражение с заданным результатом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Неожиданное поведение программы: исправить ошибку в коде http://www.cyberforum.ru/cpp-beginners/thread1817060.html
извиняюсь за возможно глупый вопрос, но почему программа говорит,что в выделенной строке ошибка? хотел написать в ней: а в квадрате + в в квадрате = с в квадрате #include "stdafx.h" #include "iostream" #include "conio.h" #include "math.h" using namespace std; int main()
C++ Описать класс песня Описать класс песня: Название Исполнитель Длительность в минутах методы: конструкторы деструктор перегрузить оператор вывода<< http://www.cyberforum.ru/cpp-beginners/thread1817057.html
C++ Вычислить сумму ряда
Можно как то с пояснениями как это вообще прописывается? И что это за последовательность такая?
C++ Можете подсказать по поводу задачи?
Расчитать сумму членов бесконечного ряда с заданой пользователем точностью E для заданого поьзователем значения х(-1;1) : x-(x^3)/3!+(x^5)/5!... #include <iostream> #include <math.h> #include <clocale> #define PI (3.1415926) using namespace std; int main (){ int e,rez; double x;
C++ Вычислить среднее значение чисел в каждом столбце прямоугольной матрицы http://www.cyberforum.ru/cpp-beginners/thread1817044.html
Полное условие: Вычислить и вывести среднее значение чисел в каждом столбце прямоугольной матрицы. #include <iostream> #include <math.h> #include <stdlib.h> #include <stdio.h> #include <ctime> using namespace std; int main ( )
C++ Как сообщить компилятору, чтобы код не проверялся на ошибки? Функция из моей предыдущей темы заработала http://www.cyberforum.ru/cpp-beginners/thread1817011.html#post9596889 затем я ее перенес в библиотеку dll и она начала ругаться на это: fout << date << endl; отсутствует оператор "<<", соответствующий этим операндам (date имеет формат char* date) подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.10.2016, 18:16     Заданы цифры - расставить знаки сложения и вычитания так, чтобы получилось выражение с заданным результатом
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//Имеются цифры 1, 2, 3, 4, 5, 6, 7, 8, 9.
//Необходимо расставить между ними любое количество знаков
//"плюс" или "минус" так, чтобы получить выражение, равное
//числу введенного пользователем.
 
//Например: Ввожу число 100. Результат: 123+4-5+67-89=100.
//Число 123 вышло из склеивания соседних цифр 1, 2 и 3. Также 67 и 89.
///////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                 T_expr;
typedef std::vector     < int   >   T_ternary_number;
///////////////////////////////////////////////////////////////////////////////
T_expr  make_expr
    (
        T_ternary_number    const   &   ternary_number,
        T_expr              const   &   digits
    )
{
    T_expr  res;
 
    for( size_t  i{}; i < digits.size(); ++i )
    {
        if(i)
        {
            switch  (
                        ternary_number[ i - 1 ]
                    )
            {
            case    1   :   res     +=  '+';    break;
            case    2   :   res     +=  '-';    break;
            default     :
                ;
            }//switch
        }//if
 
        res     +=  digits[i];
    }//for
 
    return  res;
}
///////////////////////////////////////////////////////////////////////////////
int     calc_expr( T_expr   expr )
{
    size_t  pos{};
    int     res     =   std::stoi   (
                                        expr,
                                        &pos
                                    );
 
    expr    =   expr.substr( pos );
 
    while   (
                !expr.empty()
            )
    {
        char    op  =   expr.front();
        expr.erase(0, 1);
        int     term    =   std::stoi   (
                                            expr,
                                            &pos
                                        );
 
        expr    =   expr.substr( pos );
        op  ==  '+'
            ?   res     +=  term
            :   res     -=  term;
    }//while
 
    return  res;
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_inc_ternary_number( T_ternary_number     &   ternary_number )
{
    for (
            int
            i   =    ternary_number.size()  -   1;
            i   >=  0;
            --i
        )
    {
        if  (
                ternary_number[i]   <   3
            )
        {
            ++ternary_number[i];
            return  true;
        }
        else
        {
            ternary_number[i]   =   0;
        }
    }//for
 
    return  false;
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_set_expr
    (
        int         n,
        T_expr  &   expr
    )
{
    static  const       T_expr  DIGITS  { "123456789"   };
 
    T_ternary_number    ternary_number  (
                                            DIGITS.size() - 1
                                        );
 
    do
    {
        expr    =   make_expr   (
                                    ternary_number,
                                    DIGITS
                                );
 
        if  (
                    calc_expr( expr )
                ==  n
            )
        {
            return  true;
        }
    }
    while   (
                successfully_inc_ternary_number( ternary_number )
            );
 
    return  false;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        int     n{};
        std::cout   <<  "n = ";
        std::cin    >>  n;
 
        T_expr  expr;
 
        std::cout   <<  (
                            successfully_set_expr( n,   expr )
                                ?   expr
                                :   "no solution"
                        )
 
                    <<  std::endl
                    <<  std::endl;
    }//for
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru