-1

これは部分的に数学に関連していますが、私は VB.NET でそれを行っているため (プログラマーは数学を知っていますが、数学者はプログラミングを知らない可能性があるため :))、ここでより迅速な答えが得られる可能性が高くなります。

画像を表形式で印刷しています。各ページには M 行と N 列があります。画像の数が 1 ページに収まりきらない場合は、次のページに移動します。ここでの問題は、画像のインデックス番号が与えられた場合、画像のゼロベースの行/列を与える最短の式は何ですか (それが該当するページ番号を知らない)?

しばらく時間を費やした後、私は次のことを思いつきましたが、いくつかのコーナーケースを処理しません (M列のN数、行の数、Index1 ベース):

Dim R = (Index - Index Mod (M * N)) \ M - 1 
Dim C = Index Mod M 

注意: 印刷は最初に左から右に進み、次に次の行に進みます。

4

1 に答える 1

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
ページ1
 c0 c1 c2
----------
|0 |1 |2 | r0
----------
|3 |4 |5 | r1
----------
ページ2
 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)
于 2013-09-26T15:38:54.593 に答える