首页 > 试题广场 >

设有 一个二维数组 A [ m ][ n ]

[单选题]

设有 一个二维数组 A [ m ][ n ] ,假设 A [0][0] 存放位置在 644 (10) A [2][2] 存放位置在 676 (10) ,每个元素占一个空间,问 A [3][3] (10) 存放在什么位置?脚注 (10) 表示用 10 进制表示。

  • 688
  • 678
  • 692
  • 696
题目:设有 一个二维数组 A [ m ][ n ] ,假设 A [0][0] 存放位置在 644 (10) , A [2][2] 存放位置在 676 (10) ,每个元素占一个空间,问 A [3][3](10) 存放在什么位置?脚注 (10) 表示用 10 进制表示。
解: 
        由于矩阵为A[m][n], 可知每行有n个元素
        根据A[0][0]和A[2][2]的角标及其存放的位置,可得如下方程:
                (2-0)*n+(2-0) = (676-644)*1
                                   n = 15
        设A[3][3]存放位置是p,则同样有方程:
                (3-0)*n+(3-0) = (p-644)*1
        带入n = 15,解得p = 692,由此可知选C
发表于 2018-04-15 18:14:40 回复(0)
有 A = 644;
     A + (2 n + 2) *  k = 676;
那么(3 n + 3) *  k =(676 - 644) / 2 * 3 = 48;
则 A + (3 n + 3) *  k = 644 + 48 = 692;
证毕。
编辑于 2017-08-15 18:25:34 回复(0)
一行15个元素
发表于 2017-07-06 21:36:30 回复(0)
这道题做错的我觉得都是把矩阵当成了方阵 算出来是704。。。。
发表于 2019-05-24 14:09:17 回复(0)
一图解决所有

编辑于 2019-05-08 10:22:32 回复(0)
思路想错了。一开始的时候还在考虑一个元素几个字节,实际上没有必要考虑。每个元素的字节都是固定的,把它当成黑盒就好了。像644 676这样的地址就对应元素的首字节的起始地址,比如 644下一个元素就是645,中间可能是4字节,也可以是8字节,和机器的位数有关。
剩下的就按@深蓝的海 同志的解法就好了。  
644 + 2*n + 2 = 676  起始地址644,距离A[2][2]有两行,每行n个元素,所以2 * n得到数组A[2]地址,再+2得到元素地址
我们要求的是A[3][3],所以644 +(3*n+3)=?
求出n就可
发表于 2018-03-22 13:45:38 回复(0)
有A[m][n]数组,因为已知A[0][0]地址为644,A[2][2]地址为676。两个数组元素间隔32个空间,又已知每个元素占1个空间,可得到2*x+2 = 32(此处不需要讨论该数组是以行有限还是列优先,x可为m或者n,行优先x为n,列优先x为m)。最后得到x为15
默认按照同样的优先方式,我们可以得到求A[3][3]地址的公式为3*x+3 ,即3*15+3=48。则地址为644+48=692

发表于 2021-11-05 23:16:01 回复(0)
求出n即可,676=644+n-1+n+3,所以n=15,则A[3][3]=676+12+4=692
发表于 2018-10-07 11:11:45 回复(0)
676+16=692
发表于 2018-04-21 15:38:07 回复(0)
i*n+j = j*m+i=676-644
发表于 2017-11-21 21:59:54 回复(0)
数组是按照列排序的,因为[2][2]与[0][0]相差32,按行之间差了6个元素,32与6不能整除,按列排序恰好是8个,每个元素占4位,最终得到[3][3]地址。
发表于 2017-08-15 09:54:41 回复(0)