这部分与数学有关,但由于我在VB.NET中这样做(因为程序员知道数学但数学家可能不知道编程:)),我更有可能在这里得到更快的答案:
我以表格格式打印图像。每页有M行和N列。如果图像数量超过一页上可容纳的数量,我们将继续下一页,依此类推。这里的问题是,给定图像的索引号,什么是最短的表达式,它会给我图像的从零开始的行/列(不知道它将落在哪个页码上)?
花了一些时间之后,我提出了以下内容,但它没有处理一些极端情况(M
是列数,N
是行数,{{1} }是基于1的):
Index
N.B。打印首先从左到右,然后到下一行。
答案 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)