找回原来的 3d 立方体 ...c++
Posted
技术标签:
【中文标题】找回原来的 3d 立方体 ...c++【英文标题】:getting original 3d cube back ...c++ 【发布时间】:2014-08-25 09:30:39 【问题描述】:给定一个 N*N*N* 维度的立方体。这个立方体的每个顶点都有一些数字。现在这个原始立方体被扭曲,使得(i,j,k)处的任何顶点上的数字被由(0,0,0)和(i,j,k)组成的立方体中所有数字的总和替换......现在之后失真..我们必须取回原来的立方体.. 假设原始立方体是 A,那么对于 B(i,j,k)(扭曲的)中的每个元素,我们使用以下代码..
for(int i=n-1;i>=0;i--)
for(int j=n-1;j>=0;j--)
for(int k=n-1;k>=0;k--)
for(c=0;c<=i;c++)
for(c1=0;c1<=j;c1++)
for(c2=0;c2<=k;c2++)
B(i,j,k)=B(i,j,k)+A(c,c1,c2);
什么是恢复原始立方体的有效方法...我想将 B 中每个顶点的负值存储在任何其他立方体(例如 C)中,然后使用与上述相同的方法来获取原始立方体...虽然它不能正常工作...以下是我尝试过的方法..
C[50][50][50] // this C is already having values same as in B but with opposite sign
for(c=0;c<=i;c++)
for(c1=0;c1<=j;c1++)
for(c2=0;c2<=k;c2++)
C(i,j,k)=C(i,j,k)+B(c,c1,c2);
P.S 立方体的最大尺寸是 50*50*50..任何帮助请..
【问题讨论】:
我没有跟随失真。因为,i
、j
和 k
是常量,所以您似乎将 B
(而不是 A?)扭曲到 B - B(i,j,k) 中的 same 单元格)。失真线应该是这样的:A(c,c1,c2) = A(c,c1,c2) + B(c,c1,c2)
?
可能是for (i = 0; i < c; i++)
...?
看起来 A 是我们原来的立方体 .. 并且该代码针对所有 i,j,k [0-n-1] 运行...也就是说...实际上使用了 6 个循环.. .希望你明白我的意思..
@unknown__ 好吧...不,因为您的代码另有说明
代码本身没有任何意义。请好好看看。如果你不修复它,或者提供全面的解释,我会投票关闭,因为不清楚。
【参考方案1】:
假设A
是原始立方体,B
是扭曲后的立方体。也就是说,
B[i,j,k] = sum(A[i*,j*,k*] for i* <= i, j* <= j, k* <= k)
要从B
取回A
,请执行以下操作
A[i,j,k] = B[i, j, k]
- B[i-1, j, k] - B[i, j-1, k] - B[i, j, k-1]
+ B[i, j-1, k-1] - B[i-1, j, k-1] - B[i-1, j-1, k]
- B[i-1, j-1, k-1]
如果i < 0 or j < 0 or k < 0
B[i,j,k] = 0
在哪里
它遵循包含-排除原则。
【讨论】:
谢谢...顺便说一句。任何好的资源来阅读这个原则。??以上是关于找回原来的 3d 立方体 ...c++的主要内容,如果未能解决你的问题,请参考以下文章