将顺序网格索引转换为行列索引:公式验证及q×t数组适配
二维数组顺序索引转行列索引的公式验证与适配
问题说明
我有一个m×m的二维数组,需要将**顺序索引(第n个位置,从1开始计数)**转换为行、列索引(从0开始计数)。举例:在3×3数组中,顺序位置2对应行=0、列=1,数组结构如下:
|---|---|---| | 1 | 2 | 3 | |---|---|---| | 4 | 5 | 6 | |---|---|---| | 7 | 8 | 9 | |---|---|---|
疑问1:m×m数组的转换公式是否正确?
我推导的公式:
row = (int)((n-1 / m)) col = ((n -1) % m )
疑问2:适配q×t数组的修改是否正确?
我尝试修改后的公式:
row = (int)((n-1 / q)) col = ((n -1) % t )
解答
1. m×m数组的公式修正
你给出的公式存在运算优先级错误:n-1 / m会先执行除法1/m,再和n相减,这不符合需求逻辑。正确的写法是先计算n-1(把从1开始的索引转为从0开始的偏移量),再做整数除法和取余:
row = (int)((n - 1) / m) col = (n - 1) % m
用你的例子验证:n=2,m=3时,(2-1)/3=0(整数除法结果为0),(2-1)%3=1,正好对应行0、列1,完全正确。
2. q×t数组的公式修正
你修改后的公式同样有运算优先级问题,且核心逻辑有误:对于q行t列的二维数组,每一行包含t个元素,行索引由偏移量除以列数t决定,列索引由偏移量对列数t取余决定。正确公式应为:
row = (int)((n - 1) / t) col = (n - 1) % t
举个实例:q=2行、t=3列的数组,顺序位置4对应的偏移量是3,3/3=1(行索引1),3%3=0(列索引0),符合数组的顺序排布(1→(0,0),2→(0,1),3→(0,2),4→(1,0)...)。
如果你的q代表列数、t代表行数,只需将公式中的t替换为q即可,但通常q×t数组默认指q行t列,以上公式适用。
内容的提问来源于stack exchange,提问作者JJ SV
相关产品推荐
相关产品推荐

