【问题标题】:getting original 3d cube back ...c++找回原来的 3d 立方体 ...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..任何帮助请..

【问题讨论】:

  • 我没有跟随失真。因为,ijk 是常量,所以您似乎将 B(而不是 A?)扭曲到 B - B(i,j,k) 中的 same 单元格)。失真线应该是这样的:A(c,c1,c2) = A(c,c1,c2) + B(c,c1,c2)
  • 可能是for (i = 0; i &lt; c; i++) ...?
  • 看起来 A 是我们原来的立方体 .. 并且该代码针对所有 i,j,k [0-n-1] 运行...也就是说...实际上使用了 6 个循环.. .希望你明白我的意思..
  • @unknown__ 好吧...不,因为您的代码另有说明
  • 代码本身没有任何意义。请好好看看。如果你不修复它,或者提供全面的解释,我会投票关闭,因为不清楚。

标签: c++ algorithm geometry


【解决方案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 &lt; 0 or j &lt; 0 or k &lt; 0B[i,j,k] = 0 在哪里

它遵循包含-排除原则。

【讨论】:

  • 谢谢...顺便说一句。任何好的资源来阅读这个原则。??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多