如何获得矩阵中两个数字之间的对角线数字?

Posted

技术标签:

【中文标题】如何获得矩阵中两个数字之间的对角线数字?【英文标题】:How to get diagonal numbers between two number in a matrix? 【发布时间】:2019-09-24 22:11:02 【问题描述】:

如何检查方阵的两个索引是否彼此对角线。考虑数组。

[
 0 , 1 , 2 , 3 ,
 4 , 5 , 6 , 7 ,
 8 , 9 , 10, 11,
 12, 13, 14, 15
]

创建一个函数,它接受三个参数数组和两个索引。如果两个索引彼此对角线,则它应该返回true,否则返回false 对于上述数组。

0,15 => true
3,12 => true
11,6 => true
9,6  => true

4,15 => false
8,12 => false
1,10 => false //my code fails for this.

我试图创建一个函数,但它根本不起作用。

function check(arr,a,b)
  let len = Math.sqrt(arr.length);
  let dif = Math.abs(a-b);
  return dif % (len+1) === 0 ||  dif % (len - 1) === 0

有人能给出一个简单的解决方案吗?

【问题讨论】:

什么是arr? .. 这里发生了什么:Math.sqrt(arr) @appleapple arr 是被传递的数组。 @adiga arr 将始终是一维数组,其长度将是一个完美的正方形。这意味着它就像方阵。 @R3tep 1,10 失败 【参考方案1】:

如果 delta 是长度减一或加一的倍数,您可以取绝对增量并使用余数运算符检查。

function check(array, i, j) 
   var length = Math.sqrt(array.length),
       delta = Math.abs(i - j),
       lines = Math.abs(Math.floor(i / length) - Math.floor(j / length));
   
   return delta === lines * (length - 1) || delta === lines * (length + 1);


var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

console.log(check(array, 0, 15)); // true
console.log(check(array, 3, 12)); // true
console.log(check(array, 11, 6)); // true
console.log(check(array, 9, 6)); // true

console.log(check(array, 4, 15)); // false
console.log(check(array, 8, 12)); // false
console.log(check(array, 8, 3)); // false
.as-console-wrapper  max-height: 100% !important; top: 0; 

【讨论】:

这对 (3,8) 失败 是的,我认为现在是正确的。不过,有一点。 !(delta % minus) && delta === lines * minus 实际上与 delta === lines * minus 相同(加号相同) 如果维度为 1,您正在执行 1%0,尽管结果仍然是正确的。【参考方案2】:

只需获取 col 和 row,并检查 delta 是否相同。

(实际上不需要取数组,所以我只取它的维度)

function check(dim,a,b)
  let [x1,y1]=[Math.floor(a/dim),a%dim]
  let [x2,y2]=[Math.floor(b/dim),b%dim]
  return Math.abs(x1-x2)==Math.abs(y1-y2)


console.log(check(4,0,15))
console.log(check(4,3,12))
console.log(check(4,11,6))
console.log(check(4,9,6))
console.log(check(4,4,15))
console.log(check(4,8,12))
console.log(check(4,6,12))

【讨论】:

以上是关于如何获得矩阵中两个数字之间的对角线数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何在正确视图中创建 pearson 相关矩阵

十六:矩阵数字求和

计算矩阵对角线上的数字总和

求一个3*3的整形矩阵对角线元素之和

Python练习题 028:求3*3矩阵对角线数字之和

C ++:这两种将数字写入矩阵的方式之间在速度上有显着差异吗?