Andralex wrote:
А дальше комбинаторика с полным перебором всевозможных расстановок скобок в позициях
Пошел другим путем, реализовал другой алгоритм.
В двух словах алгоритм такой.
1. Поставить одну пару скобок
первый цикл
- парсим строку задачи слева на право
- вставляем
( в первую позицию строки задачи
- или если попали на
символ + или *, то вставляем
( на позицию за этим
символом
- после каждой итерации или перед ней восстанавливаем строку до состояния входа в цикл
второй цикл
- парсим строку задачи справа на лево
- вставляем
) в крайнюю позицию строки задачи
- или если попали на
символ + или *, то вставляем
) в позицию
этого символом
после каждой итерации второго цикла должна получиться одна пара скобок
- находим и вычисляем значение в скобках , чтобы в дальнейшем заменить выражение в скобках этим значением
- после каждой итерации или перед ней восстанавливаем строку до состояния входа в цикл
После получения всех вариантов расстановки одной пары скобок повторяем для каждого варианта алгоритм расстановки одной пары скобок для каждой модифицированной строки с внесенными изменениями (выражение в скобках заменяется на его значение).
Табл. после получения всех вариантов расстановки одной пары скобок для исходной строки задачи 1+2*3+4*5+6*7+8*9+10
строка с парой скобок; мод.строка; результат
1 : (1+2*3+4*5+6*7+8*9+10)=151=151
2 : (1+2*3+4*5+6*7+8*9)+10=141+10=151
3 : (1+2*3+4*5+6*7+8)*9+10=77*9+10=703
4 : (1+2*3+4*5+6*7)+8*9+10=69+8*9+10=151
5 : (1+2*3+4*5+6)*7+8*9+10=33*7+8*9+10=313
6 : (1+2*3+4*5)+6*7+8*9+10=27+6*7+8*9+10=151
7 : (1+2*3+4)*5+6*7+8*9+10=11*5+6*7+8*9+10=179
8 : (1+2*3)+4*5+6*7+8*9+10=7+4*5+6*7+8*9+10=151
9 : (1+2)*3+4*5+6*7+8*9+10=3*3+4*5+6*7+8*9+10=153
10 : (1)+2*3+4*5+6*7+8*9+10=1+2*3+4*5+6*7+8*9+10=151
11 : 1+(2*3+4*5+6*7+8*9+10)=1+150=151
12 : 1+(2*3+4*5+6*7+8*9)+10=1+140+10=151
13 : 1+(2*3+4*5+6*7+8)*9+10=1+76*9+10=695
14 : 1+(2*3+4*5+6*7)+8*9+10=1+68+8*9+10=151
15 : 1+(2*3+4*5+6)*7+8*9+10=1+32*7+8*9+10=307
16 : 1+(2*3+4*5)+6*7+8*9+10=1+26+6*7+8*9+10=151
17 : 1+(2*3+4)*5+6*7+8*9+10=1+10*5+6*7+8*9+10=175
18 : 1+(2*3)+4*5+6*7+8*9+10=1+6+4*5+6*7+8*9+10=151
19 : 1+(2)*3+4*5+6*7+8*9+10=1+2*3+4*5+6*7+8*9+10=151
20 : 1+2*(3+4*5+6*7+8*9+10)=1+2*147=295
21 : 1+2*(3+4*5+6*7+8*9)+10=1+2*137+10=285
22 : 1+2*(3+4*5+6*7+8)*9+10=1+2*73*9+10=1325
23 : 1+2*(3+4*5+6*7)+8*9+10=1+2*65+8*9+10=213
24 : 1+2*(3+4*5+6)*7+8*9+10=1+2*29*7+8*9+10=489
25 : 1+2*(3+4*5)+6*7+8*9+10=1+2*23+6*7+8*9+10=171
26 : 1+2*(3+4)*5+6*7+8*9+10=1+2*7*5+6*7+8*9+10=195
27 : 1+2*(3)+4*5+6*7+8*9+10=1+2*3+4*5+6*7+8*9+10=151
28 : 1+2*3+(4*5+6*7+8*9+10)=1+2*3+144=151
29 : 1+2*3+(4*5+6*7+8*9)+10=1+2*3+134+10=151
30 : 1+2*3+(4*5+6*7+8)*9+10=1+2*3+70*9+10=647
31 : 1+2*3+(4*5+6*7)+8*9+10=1+2*3+62+8*9+10=151
32 : 1+2*3+(4*5+6)*7+8*9+10=1+2*3+26*7+8*9+10=271
33 : 1+2*3+(4*5)+6*7+8*9+10=1+2*3+20+6*7+8*9+10=151
34 : 1+2*3+(4)*5+6*7+8*9+10=1+2*3+4*5+6*7+8*9+10=151
35 : 1+2*3+4*(5+6*7+8*9+10)=1+2*3+4*129=523
36 : 1+2*3+4*(5+6*7+8*9)+10=1+2*3+4*119+10=493
37 : 1+2*3+4*(5+6*7+8)*9+10=1+2*3+4*55*9+10=1997
38 : 1+2*3+4*(5+6*7)+8*9+10=1+2*3+4*47+8*9+10=277
39 : 1+2*3+4*(5+6)*7+8*9+10=1+2*3+4*11*7+8*9+10=397
40 : 1+2*3+4*(5)+6*7+8*9+10=1+2*3+4*5+6*7+8*9+10=151
41 : 1+2*3+4*5+(6*7+8*9+10)=1+2*3+4*5+124=151
42 : 1+2*3+4*5+(6*7+8*9)+10=1+2*3+4*5+114+10=151
43 : 1+2*3+4*5+(6*7+8)*9+10=1+2*3+4*5+50*9+10=487
44 : 1+2*3+4*5+(6*7)+8*9+10=1+2*3+4*5+42+8*9+10=151
45 : 1+2*3+4*5+(6)*7+8*9+10=1+2*3+4*5+6*7+8*9+10=151
46 : 1+2*3+4*5+6*(7+8*9+10)=1+2*3+4*5+6*89=561
47 : 1+2*3+4*5+6*(7+8*9)+10=1+2*3+4*5+6*79+10=511
48 : 1+2*3+4*5+6*(7+8)*9+10=1+2*3+4*5+6*15*9+10=847
49 : 1+2*3+4*5+6*(7)+8*9+10=1+2*3+4*5+6*7+8*9+10=151
50 : 1+2*3+4*5+6*7+(8*9+10)=1+2*3+4*5+6*7+82=151
51 : 1+2*3+4*5+6*7+(8*9)+10=1+2*3+4*5+6*7+72+10=151
52 : 1+2*3+4*5+6*7+(8)*9+10=1+2*3+4*5+6*7+8*9+10=151
53 : 1+2*3+4*5+6*7+8*(9+10)=1+2*3+4*5+6*7+8*19=221
54 : 1+2*3+4*5+6*7+8*(9)+10=1+2*3+4*5+6*7+8*9+10=151
55 : 1+2*3+4*5+6*7+8*9+(10)=1+2*3+4*5+6*7+8*9+10=151