Страницы

Поиск по вопросам

среда, 5 декабря 2018 г.

Составить формулу на языке программирования

Не могу придумать как составить формулу, если A = 10, B = 25, C = 15, а R=40. Нужно узнать сколько есть вариантов составить набор из элементов A,B,C ,чтобы сумма их была именно равна R. В Данном случае 40. То есть на этом примере ответом будет 3 т.к.
A+A+A+A = R C+C+A = R B+C = R
А как это все записать формулу, чтобы программа считала сумму возможных вариантов?


Ответ

Можно также решить рекурсией, но без полного перебора.
Наши исходные A = 10, B = 25, C = 15, а R=40 можно представить в виде линейного уравнения
Ax+By+Cz=R
Теперь нам нужно найти все возможные варианты коэффициентов x,y,z доступные нам в данном случае. Сделать это можно получив целое от деления R на А и потом инкрементно получаем все возможные x, сохраняем. Повоторяем это для B и С. После уже запускаем в рекурсии ищем возможные варианты.
Думаю если изучить методы решения систем линейных алгебраических уравнений можно найти что то лучше.
r = 40; a = [10,25,15]; b = []; //находим коэффициенты a.forEach(function(e,indx){ i = parseInt(r/e); b[indx] = []; while(i>=0){ b[indx][b[indx].length]=i--; } }); out = []; //ищем решения function recursion(i,sum=0,_sum=""){ b[i].forEach(function(e, indx){ sm=a[i]*e+sum; tmp = e>0?((_sum!=""?_sum+"+":"")+"("+a[i]+"*"+e+")"):_sum; if(sm==r){ out[out.length]=tmp; } else if( sm

Комментариев нет:

Отправить комментарий