cyber,
всего вариантов 768 за счёт оптимизации (continue) получилось 488 , а необходимые варианты были созданы только 1 раз (всего 13).
<script>
var num = [10, 7, 8, 1],
res = [],
limit = 55,
a, b, c, e;
for (var i = 0; i <= 5; i++) {
a = i * num[0];
if (a > limit) continue;
for (var k = 0; k <= 3; k++) {
b = k * num[1];
if (a + b > limit) continue;
for (var n = 0; n <= 3; n++) {
c = n * num[2];
if (a + b + c > limit) continue;
for (var d = 0; d <= 7; d++) {
e = d * num[3];
if (a + b + c + e == limit) res.push([a, b, c, e])
}
}
}
};
document.write(
res.join("<br>")+ "<br>Всего вариантов : " + res.length
);
</script>