【问题标题】:How to get diagonal and antidiagonal number如何获得对角线和对角线数
【发布时间】:2018-06-20 02:10:32
【问题描述】:

如果您可以从一维数组中获取行和列,请给出下面的宽度和公式。你如何得到对角线和反对角线?我的例子是微不足道的。寻找可以扩展到 MxN 且通用的东西。

伪代码

A = array[26];
width = 5;
row(index)    = floor((index / width))
column(index) = index % width
digonal(index) = //???
antidigonal(index) = //???

示例值

row 5:  26  27  28  29  30
row 4:  21  22  23  24  25
row 3:  16  17  18  19  20
row 2:  11  12  13  14  15
row 1:  6   7   8   9   10
row 0:  1   2   3   4   5
--------------------------      
column: 0   1   2   3   4

diag 0: 1               
diag 1: 6, 2                
diag 2: 3, 7, 11                
diag 3: 4, 8, 12, 16                
etc.            

antidiag 0: 5               
antidiag 1: 4, 10               
antidiag 2: 3, 9, 15
etc.            

How to get row and column from index?相关

【问题讨论】:

  • 数组的对角线是什么?什么是对角线?
  • 你会如何手动完成,现在将其转换为代码。
  • 我不明白你在追求什么。您要计算的输入和输出是什么?您想要对应于对角线或对角线上特定位置的索引吗?或者你想以某种方式从一个索引转到对角线/对角线上的另一个索引?还是别的什么?
  • 对角线是row 等于col
  • 请编辑您的问题以包含一些示例,因为您不清楚您在问什么。对于给定的一组输入,您期望得到什么输出?

标签: javascript arrays math


【解决方案1】:

根据您示例中的编号....

对角线 k 指数是:

i * width + k - i

对于 i 范围从 0 到 k。

例如,要打印对角线 k,

for(int i = 0; i <= k; i++) {
    System.out.println(array[i * (width - 1) + k]);
}

上面的循环是用java写的,javascript循环类似。

这给出了从对角线 0 到对角线宽度 - 1 的对角线。 对于剩余的对角线,您使用每个 k(其中 k 的范围从宽度到 2 * 宽度 - 1)

for(int i = k - (width - 1); i < width - 1; i++) {
    System.out.println(array[i * (width - 1) + k]);
}

例如,如果宽度为 5,则在第一个 for 循环中使用 k = 0 到 4,然后在第二个 for 循环中使用 k = 6 到 9,得到 9 条对角线。

对于反对角索引,只需从宽度中减去每个对角线值 - 1

width - 1 - (i * width + k - i)

for i 范围如上述 for 循环中所示

【讨论】:

  • 好的开始,但我需要反过来。给出索引,对角线是什么。同一对角线上的两个索引应该具有相同的值。
  • 我不明白你的意思。上面的 for 循环打印出每个对角线。对于对角线 0,将 k 替换为 0。对于对角线 1,将 k 替换为 1。
  • 我不知道“同一对角线上的两个索引应该具有相同的值”是什么意思。你有一个数组,它有索引,如果两个索引有相同的值,你说的是同一个数组元素。
【解决方案2】:

找到方法

diagonal: function (s) {
  return row(s) - col(s);
},

antidiagonal: function (s) {
  return row(s) + col(s);
},

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多