C++的问题

1.有定义int*a=newint[10*4*3]的一维数组,用来表示维度分别为10,4,3的三维数组,若以变量i,j,k来表示各维度的实际下标,请书写出将三维转换为一维... 1. 有定义 int * a = new int[10*4*3] 的一维数组,用来表示维度分别为10,4,3的三维数组,若以变量i, j,k来表示各维度的实际下标,请书写出将三维转换为一维线性表的下标计算表达式,并说明下标转换的过程。
提示:通过i,j,k的运算写出与其对应的一维数组的变量的下标。
例如,当i,j,k的值分别为0,0,0时,表达式的值为0,故实际访问的是a[0];当i,j,k的值分别为2,3,1时,表达式的值为34,故实际访问的是a[34];
哪位大佬懂,求代码,急!
展开
 我来答
CodeBlove
2019-03-21 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:244万
展开全部

想象有一个柜子,柜子中每个格子可以保存一个int的数,这个柜子的长宽高分别为10、4、3,设常数为a,b,c ,单位就是格子,而I、J、K代表各个方向的索引,设:线性索引为index。

思路:先考虑平面(见下图),I为横向索引表示列,J为竖向索引表示行,图中格子的数字是两个方向的索引号,格子内是线性索引,由于每行的宽度一定为a,因此J行第一个格子的索引为a*J,而I为该行上的横向索引,因此(I,J)所指向的格子的线性索引为a*J+I。举例,假设I=7,J=2,则单一平面上变换后的线性索引 index=a*J+I=10*2+7=27。

另外,请注意,在推导平面索引时可以看到我们并不需要行数,而只用到了长度(列数),即b不参与计算,记住这点后面有用。

那么有了平面的思考,推广到三维就好办了,由上图可知,一个平面的格子总数为a*b,因此K所在平面左上角格子的线性索引为K*a*b,所以(I,J,K)指定的格子在线性表中的索引为 index=K*a*b+J*a+I。举例,当I,J,K={6,1,2}时,index=2*10*4+1*10+6=96。

同样的,与平面一样,三维索引变换为线性索引时,是不需要第三维的高度c参与计算的(此题中的3)。

特地用Excel画了两张示意图,希望你能看明白其算法,所以任何解题先学习或自己推导算法,以后遇到同类型就可以套公式即可,也可以写成自定义类直接调用即可。

希望能帮到你。

cdyzxy
2019-03-19 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3725万
展开全部

n=i*4*3+j*3+k; printf("%d,%d\n",n,a[n]);

三维数组下标:每个i对应4*3个元素,j对应3个元素

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2019-03-19 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:801万
展开全部
就是i*j*k呀 2 3 1
2*3*4 3*3 加2减1 34
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夏天的小红花

2019-03-22 · TA获得超过4811个赞
知道大有可为答主
回答量:1万
采纳率:83%
帮助的人:704万
展开全部

int * a = new int[10*4*3];

int i,j,k,t;

scanf("%d%d%d",&i,&j,&k);

t=i*4*3+j*3+k;

printf("i=%d  j=%d  k=%d\t\tt=%d\ta[%d]\n",i,j,k,t,t);

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式