@Vlad_beg

Как найти сумму на обратной дагонали двухмерного массива?

Имеется двухмерный массив 5x5, нужно найти сумму на обратной диагонали.
Помогите пожалуйста никак не могу придумать алгоритм.

var result = document.getElementById("result");
	var arr = [] , rand, sum = 0;

	for(var i = 0; i < 5; i++) {
		arr.push([]);
		arr[i].push(rand);

		for(var j = 0; j < 5; j++) {
			rand = Math.floor(Math.random()*91 + 10);
			arr[i][j] = rand;
			result.innerHTML += arr[i][j]+ " | ";
		}
	}


JSFiddle

Пример:
b869a3f102534c0aad4e985987dccb71.png
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
«Обратные диагонали» характерны тем, что сумма координат X и Y в рамках одной диагонали постоянна. Алгоритм:
  1. подготовить массив сумм из (5 * 2 - 1) элемента, заполненный нулями.
  2. пройтись по всем элементам массива. Сложив координаты получаем id диагонали – он же индекс в массиве сумм.
  3. прибавляем текущий элемент к нужной сумме.
// суммы – где сумма координат X + Y = N, для каждой диагонали N постоянно
var side = 5,
  sum = Array.apply(null, Array(side * 2 - 1)).map(Number.prototype.valueOf,0),
	row, col
;

for( row = 0; row < side; row++) {
  for( col = 0; col < side; col++) {
	  sum[row + col] += arr[row][col];
	}
}

result.innerHTML += '<pre>' + JSON.stringify(sum) + '</pre>';

fiddle
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@lega
arr[0][4] + arr[1][3] + arr[2][2] + arr[3][1] + arr[4][0]
?
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
для произвольного "квадратного" двумерного массива
let arr = [[1,2,3],[2,3,4],[3,4,5]];
let res = arr.reduce((res, curr, ind)=>{
  return res + curr[curr.length - ind - 1];
},0);
console.log(res);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы