给定索引号,计算行/列

时间:2013-09-26 15:33:44

标签: arrays math matrix

这部分与数学有关,但由于我在VB.NET中这样做(因为程序员知道数学但数学家可能不知道编程:)),我更有可能在这里得到更快的答案:

我以表格格式打印图像。每页有M行和N列。如果图像数量超过一页上可容纳的数量,我们将继续下一页,依此类推。这里的问题是,给定图像的索引号,什么是最短的表达式,它会给我图像的从零开始的行/列(不知道它将落在哪个页码上)?

花了一些时间之后,我提出了以下内容,但它没有处理一些极端情况(M是列数,N是行数,{{1} }是基于1的):

Index

N.B。打印首先从左到右,然后到下一行。

1 个答案:

答案 0 :(得分:0)

首先,我将重新定义符号:

rowCount = N
columnCount = M

如果页面无关紧要,请先将index改为页面无知:

pageSize = rowCount * columnCount
index = index % pageSize

然后,如果你首先迭代行(我的意思是,当index移动时,它会转到下一列 - 所以它沿着一行滑动,并且在行的末尾它会移动到下一行)然后:

rowNumber = floor(index / columnCount)
columnNumber = index - rowNumber * columnCount

2x3网格的最后一个索引的示例:

rowCount = 2
columnCount = 3
page1
 c0 c1 c2
----------
|0 |1 |2 | r0
---------- 
|3 |4 |5 | r1
----------
page2
 c0 c1 c2
----------
|6 |7 |8 | r0
----------
|9 |10|11| r1
----------

index = 5时:

pageSize = 2*3 = 6
index = 5 % 6 = 5
rowNumber = floor(5 / 3) = 1
columnNumber = 5 - 1 * 3 = 2

index = 11时:

pageSize = 6 (as above)
index = 11 % 6 = 5
rowNumber = 1 (as above)
columnNumber = 2 (as above)