@TavernaMo

Разбив массива чисел на два подмассива сумма которых будет равна на JavaScript?

Помогите пожалуйста составить алгоритм в котором из одного рандомного массива нужно сделать два массива суммы которых будут равны, или же максимально близки друг к другу в случаи если не делится на 2. Я попытался набросать логику, ну не до конца корректно, помогите пожалуйста

const jsonRequestArrNumbers = [3,3,3,7,5]
const objSeporateArr= seporateSum(jsonRequestArrNumbers)
function seporateSum(arr){

	const counterArr = sumArr(arr)/2,
	lengthArr = arr.length-1,
	set1 =[],
	set2 =[]

	const sortArr = arr.sort((a,b)=> {
		return a-b
	})
	console.log(sortArr)
	if(lengthArr>=1){
		sortArr.forEach(el => {

			const reduceSum1=sumArr(set1),
			reduceSum2=sumArr(set2)


// reduceSum1>=reduceSum2 ? set2.push(el) : set1.push(el)

if(reduceSum1>=reduceSum2 && reduceSum2 <= counterArr){
	set2.push(el)
}else if(reduceSum1>=reduceSum2 && reduceSum2>=counterArr){
	set1.push(el)
}else if(reduceSum1<=reduceSum2 && reduceSum1<=counterArr){
	set1.push(el)
}else if(reduceSum1<=reduceSum2 && reduceSum1>=counterArr){
	set2.push(el)
}
})
	}
	return{
		set1:set1,
		set2:set2
	}
}

function sumArr(arr){
	let res=arr.reduce((sum,prev)=>{
		sum+=prev
		return sum
	},0)
	return res
}

console.log(objSeporateArr)
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
1. Отсортировать исходный массив по возрастанию
2. Пройтись в цикле по массиву распределяя поочерёдно значения между 2-мя массивами
3. Если сумма чисел в одном из массивов больше, найти разницу сумм масивов
4. Отсортировать массив с большей суммой чисел по возрастанию
5. Пройтись в цикле по большему массиву перемещая значение в массив с меньше суммой до тех пор пока суммы не станут равны или разница сумм не станет "больше-равно" разницы из п3
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽