如何获得矩阵中两个数字之间的对角线数字?
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))
【讨论】:
以上是关于如何获得矩阵中两个数字之间的对角线数字?的主要内容,如果未能解决你的问题,请参考以下文章