Не могу придумать как составить формулу, если 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
Комментариев нет:
Отправить комментарий