Вверх ↑
Ответов: 132
Mafia
Консильери
#1: 2019-10-30 06:01:56 ЛС | профиль | цитата
В коде заменить ‹ и › на нормальные символы и задать нужные параметры.

В браузере нажать F12, найти там вкладку Console, вставить код, выполнить.

Можно было через рекурсию, но у неё есть предел, непревышение которого задачей не гарантировано, да и так интереснее.

// задаваемые параметры
var chisla = [1, 2, 3, 4, 5, 6]
var nado_naiti = 10
var nado_slozhit = 3
// далее магия
var poses = []
var test = 0
// это для наглядности
var poses_max_index = nado_slozhit - 1
var chisla_max_index = chisla.length - 1
// ставим начальные позиции
for(var i = 0; i ‹ nado_slozhit; i++){
poses[i] = i
}
// крутимся, пока левая позиция не упрётся в свой предел
while(poses[0] ‹= chisla.length - nado_slozhit){
// складываем выбранные позиции
test = 0
for(var i = 0; i ‹ nado_slozhit; i++){
test += chisla[poses[i]]
}
// проверяем набранное на соответствие условию
if(test == nado_naiti){
// при соответствии выводим
var text = chisla[poses[0]]
for(var i = 1; i ‹ nado_slozhit; i++){
text += ', ' + chisla[poses[i]]
}
console.log(text)
}
// увеличиваем правую позицию
poses[poses_max_index]++
// увеличиваем остальные позиции, в обратном порядке
for(var i = poses_max_index; i › 0; i--){
// если текущая превысила лимит по позиции
if(poses[i] › chisla_max_index - (poses_max_index - i)){
// увеличиваем предыдущую
poses[i - 1]++
continue
}
// иначе дальше влево идти не надобно
break
}
// сбрасываем превысившие позиции для новой итерации
for(var i = 1; i ‹ nado_slozhit; i++){
// если текущая превысила лимит по позиции
if(poses[i] › chisla_max_index - (poses_max_index - i)){
// переназначаем на основании предыдущей
poses[i] = poses[i - 1] + 1
}
}
}
карма: -1
0