Менять цифры местами нельзя. Пример: в записи 123 = 15 пропущен знак «+» между числами «12» и «3».

11 Окт в 19:40
4 +1
0
Ответы
1

Вы хотите, чтобы я составилааа выражение, вставив между цифрами знаки неменяяпорядокцифрне меняя порядок цифрнеменяяпорядокцифр, чтобы получилось заданное равенство? Или нужна идея/алгоритм для таких задач? Уточните, пожалуйста, какие операции разрешены плюс,минус,умножение,деление,возведениевстепень,скобкиит.п.плюс, минус, умножение, деление, возведение в степень, скобки и т. п.плюс,минус,умножение,деление,возведениевстепень,скобкиит.п., и нужно ли учитывать объединение соседних цифр в многозначные числа это,судяпопримеру123=15—даэто, судя по примеру 123 = 15 — даэто,судяпопримеру123=15—да.

Ниже — кратно и наглядно: если разрешены только +, -, *, / и конкатенация цифр, то можно перебрать все способы разбить строку цифр на числа и поставить между ними операторы. Пример кода на Python для поиска всех выражений, дающих заданное значение безучётаскобок,сплавающейточкойдляделениябез учёта скобок, с плавающей точкой для делениябезучётаскобок,сплавающейточкойдляделения:

def find_expressionsdigits,targetdigits, targetdigits,target:
import itertools, math
ops = ′+′,′−′,′∗′,′/′'+', '-', '*', '/'+,,,/ results =

# перебор всех способов разбить строку на числа конкатенацияразрешенаконкатенация разрешенаконкатенацияразрешена n = lendigitsdigitsdigits # маска разрезов: между i и i+1 либо разрез, либо нет
for cut_mask in range(1 << (n - 1)):
parts = cur = digits000 for i in rangen−1n - 1n1:
if (cut_mask >> i) & 1:
parts.appendcurcurcur cur = digitsi+1i+1i+1 else:
cur += digitsi+1i+1i+1 parts.appendcurcurcur
k = lenpartspartsparts if k == 0:
continue
# если только одно число, просто сравнить
if k == 1:
try:
if absfloat(parts[0])−targetfloat(parts[0]) - targetfloat(parts[0])target < 1e-9:
results.appendparts[0]+"="+str(target)parts[0] + " = " + str(target)parts[0]+"="+str(target) except:
pass
continue
# перебор всех сочетаний операторов между частями
for op_choice in itertools.productops,repeat=k−1ops, repeat=k-1ops,repeat=k1:
expr = parts000 for op, p in zipopchoice,parts[1:]op_choice, parts[1:]opc hoice,parts[1:]:
expr += op + p
# безопасная проверка деления на 0 и вычисление
try:
val = evalexprexprexpr except ZeroDivisionError:
continue
except Exception:
continue
if absval−targetval - targetvaltarget < 1e-9:
results.appendexpr+"="+str(target)expr + " = " + str(target)expr+"="+str(target) return sortedset(results)set(results)set(results)

Пример использования:
print(find_expressions("123", 15))

вернёт ′12+3=15′'12+3 = 15'12+3=15

Если нужны скобки разныеприоритетыоперацийразные приоритеты операцийразныеприоритетыопераций — можно расширить перебор, генерируя все возможные бинарные скобочные расстановки деревьядеревьядеревья над частями, но это усложняет реализацию.

Напишите, пожалуйста: какое конкретно выражение надо получить какаястрокацифрикакойрезультаткакая строка цифр и какой результаткакаястрокацифрикакойрезультат и какие операции разрешены — решу или подскажу дальше.

11 Окт в 20:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир