C/C++

Задача на C++ срочно

Задание: В написанном выражении ((((1?2)?3)?4)?5)?6 вместо каждого знака? вставить знак одной из 4 арифметических операций +,-*,/ так, чтобы результат вычислений равнялся 35(при делении дробная часть в частном отбрасывается.) Найти все решения.
Бьюсь уже пятый час, надо решить без лишних конструкций и библиотек никаких string и прочего. Желательно через массивы и циклы. Пожалуйста помогите)
void f(int left = 1, int level = 0) {
static char res[] = "((((1?2)?3)?4)?5)?6\n";
if (level > 4) {
if (left == 35) { cout << res; }
return;
}
res[5 + level * 3] = '+'; f(left + (level + 2), level + 1);
res[5 + level * 3] = '-'; f(left - (level + 2), level + 1);
res[5 + level * 3] = '*'; f(left * (level + 2), level + 1);
res[5 + level * 3] = '/'; f(left / (level + 2), level + 1);
}

int main() {
f();
return 0;
}
Slava Korshunoff
Slava Korshunoff
74 664
Лучший ответ
Сергей Вдовица спасибо большое за задачу, могу ли я задать вам несколько вопросов по ней здесь или вам на почту?
Slava Korshunoff Решение в одной главной функции:

char res[] = "((((1?2)?3)?4)?5)?6\n";
int val[6];
for (int i = 0; i < 1024; ++i) {
val[0] = 1;
for (int j = 0, k = i; j < 5; ++j, k >>= 2) {
switch(k & 3) {
case 0: res[5 + j * 3] = '+'; val[j + 1] = val[j] + (j + 2); break;
case 1: res[5 + j * 3] = '-'; val[j + 1] = val[j] - (j + 2); break;
case 2: res[5 + j * 3] = '*'; val[j + 1] = val[j] * (j + 2); break;
case 3: res[5 + j * 3] = '/'; val[j + 1] = val[j] / (j + 2); break;
}
}
if (val[5] == 35) { cout << res; }
}
#include <iostream>
using namespace std;
int f(int x, int y, int operation)
{
switch (operation)
{
case 0: return x + y;
case 1: return x - y;
case 2: return x * y;
case 3: return x / y;
}
}
void g(int operation)
{
switch (operation)
{
case 0: cout << '+'; break;
case 1: cout << '-'; break;
case 2: cout << '*'; break;
case 3: cout << '/'; break;
}
}
int main()
{
int a, b, c, d, e;
for (a = 0; a < 4; a++)
for (b = 0; b < 4; b++)
for (c = 0; c < 4; c++)
for (d = 0; d < 4; d++)
for (e = 0; e < 4; e++)
if (f(f(f(f(f(1, 2, a), 3, b), 4, c), 5, d), 6, e) == 35)
{ cout << "((((1";
g(a);
cout << "2)";
g(b);
cout << "3)";
g(c);
cout << "4)";
g(d);
cout << "5)";
g(e);
cout << '6' << endl;
}
system("pause > nul");
}
Получаются три комбинации:
Ринат Иманаев
Ринат Иманаев
29 440
Сергей Вдовица А эту задачу реально оформить в рамках одной главной функции main?
(1+2)*3+(4*5+6)=35