Re: [理工] 资料结构Array位址计算

楼主: john35452 (小杰)   2014-03-08 22:18:20
※ 引述《APE36 (PT乡民)》之铭言:
: 1.
: A(3,3)=121 , A(6,4)=159 请问A(4,5)之位址为多少??
: Ans:192
: 2.
: A(1,1)=2 , A(2,3)=18 , A(3,2)=28 请问A(4,5)之位址为多少??
: ANS: 46
: 3.
: 阵列A(1:6,1:4,1:2) , a=200 , d=1 , 请问A(4,2,2)之位址为多少?
: 有人能帮忙解详细步骤吗??感谢!! 有看没有懂~.~
第三题小弟较不确定,如果有误请见谅
看到题目如果是二维的阵列
则可以先试着先从座标位置的大小关系来判断row or column major
若无法直接判断则需要直接去计算、尝试
1.
此题本身没给阵列的行数和列数
而元素大小的部分,我不确定是忘了给还是怎样
但就此题答案看,元素大小为1...
由于此题从大小关系无法判断何种major
所以直接下手计算
设阵列为m*n
consider column-major:A(6,4) = A(3,3) + [(4-3)*m+(6-3)] 解出m=35
consider row-major:A(6,4) = A(3,3) + [(6-3)*n+(4-3)] 解出n=37/3 (不合)
所以可知此为column-major,且m为35
则A(4,5) = A(3,3) + [(5-3)*35+(4-3)] = 121 + (2*35+1) = 121 + 71 = 192
2.
此题一样阵列行数、列数及元素大小皆没给
但因为A(3,2)>A(2,3),所以为row-major
设阵列为m*n,且每个元素大小为d
所以A(2,3) = A(1,1) + [ (2-1)*n + (3-1) ]*d
A(3,2) = A(2,3) + [ (3-2)*n + (2-3) ]*d
=> 18 = 2 + (n+2)*d
28 = 18 + (n-1)*d
=> d=2,n=6
所以A(4,5)= A(1,1) + ( (4-1)*6 + (5-1) )*2
= 2+(18+4)*2 = 2 + 44 = 46
3.
row-major: A(4,2,2)=A(1,1,1) + [ (4-1)*4*2 + (2-1)*2 + (2-1) ]*1
=200 + [(3*4*2) + (1*2) + 1] = 200 + 27 = 227
col-major: A(4,2,2)=A(1,1,1) + [ (2-1)*4*6 + (2-1)*6 + (4-1) ]*1
=200 + [(1*6*4) + (1*6) + 3] = 200 + 33 = 233

Links booklink

Contact Us: admin [ a t ] ucptt.com