所以我对 Mathematica 还是很陌生,并且正在尝试学习以一种实用的方式解决问题。我正在解决的问题是列出我可以对列表中的元素求和的方式(重复),所以总和是某个值的 leq。下面的代码很好地解决了这个问题。
i = {7.25, 7.75, 15, 19, 22};
m = 22;
getSum[l_List, n_List] := Total[Thread[{l, n}] /. {x_, y_} -> x y];
t = Prepend[Map[Range[0, Floor[m/#]] &, i], List];
Outer @@ %;
Flatten[%, ArrayDepth[%] - 2];
Map[{#, getSum[i, #]} &, %];
DeleteCases[%, {_, x_} /; x > m || x == 0];
TableForm[Flatten /@ SortBy[%, Last], 0,
TableHeadings -> {None, Append[i, "Total"]}]
但是,代码检查了很多不必要的情况,如果 m 越高,列表越长,这可能是一个问题。我的问题只是关于效率和代码优雅性,解决这个问题的最数学式的方法是什么。