Форум программистов, компьютерный форум 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) подробнее

Показать сообщение отдельно
Invader0x7F
Helper C/C++
 Аватар для Invader0x7F
264 / 141 / 56
Регистрация: 22.09.2016
Сообщений: 478
Завершенные тесты: 4
02.10.2016, 04:58     Заданы цифры - расставить знаки сложения и вычитания так, чтобы получилось выражение с заданным результатом
Вот написал программу которая находит все комбинации чисел в сумме дающие число x = 100 заданной длины count = 5.
Извините пожалуйста за опоздание, но вчера имел много работы и не мог быстро выполнить ваше задание.
В отличие от других программ данная программа находит все комбинации в том числе и заданную вами.
К данному посту прилагаю exe-шник и скриншот для демонстрации (см. аттачмент ниже).

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
#include <map>
#include <ctime>
#include <vector>
#include <utility>
#include <iostream>
#include <algorithm>
#include <functional>
 
using std::multimap;
using std::vector;
 
using namespace std;
 
const int N = 9;
 
int main()
{
    std::vector<int> magic_values;
    std::vector<int> A = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 
    int x = 0, count = 0;
    std::cout << "x = "; cin >> x;
    std::cout << "count = "; cin >> count;
 
    int cnt = 0, n_val = x;
    for (; n_val >= 1; n_val /= 10)
        cnt++;
 
    for (int t = 0; t < N; t += cnt)
        for (int pos = t; pos < t + cnt; pos++)
            for (int n_count = (t + cnt) - pos; n_count > 0; n_count--)
            {
                int n_digit = n_count - 1; n_val = 0;
                for (int t1 = pos; t1 < pos + n_count; t1++, n_digit--)
                    n_val += A[t1] * int(pow(10.0, n_digit));
 
                magic_values.push_back(n_val);
            }
 
    for (int r = cnt; r < N; r += cnt)
        magic_values.push_back(A[r] + A[r - 1] * 10);
 
    std::sort(magic_values.begin(), magic_values.end(), std::greater<int>());
 
    std::multimap<vector<int>,int> mvsets;
 
    std::vector<int> sampl_v;
    sampl_v.push_back(magic_values[2]);
 
    mvsets.insert(std::make_pair(sampl_v, magic_values[2]));
 
    for (auto it = mvsets.begin(); it != mvsets.end(); it++)
    {
        std::vector<int> magic_seq = it->first;
        int n_val = magic_seq[magic_seq.size() - 1];
 
        if (it->second != x && magic_seq.size() != count)
        {
            std::size_t i = 0; bool found = false;
            while (i < magic_values.size() && !found)
                found = magic_values[i++] == std::abs(n_val) ? 1 : 0;
 
            for (std::size_t t = i; t < magic_values.size(); t++)
            {
                std::vector<int> new_seq = magic_seq;
                new_seq.push_back(it->second > x ? -magic_values[t] : magic_values[t]);
 
                int sum = 0;
                for (std::size_t v = 0; v < new_seq.size(); v++)
                    sum += new_seq[v];
 
                mvsets.insert(std::make_pair(new_seq, sum));
            }
        }
 
        else
        {
            for (auto&& a : it->first)
                std::cout << a << " ";
            std::cout << endl;
        }
    }
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
Миниатюры
Заданы цифры - расставить знаки сложения и вычитания так, чтобы получилось выражение с заданным результатом  
Вложения
Тип файла: zip magic_nums.zip (48.0 Кб, 1 просмотров)
 
Текущее время: 04:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru