寻找方形阵列中心

时间:2016-12-18 17:26:53

标签: c arrays malloc center

我的问题是关于方阵。我有一个动态数组,以填充从1到N的数字,从中心开始#39;和螺旋式的。如果我有一个6x6阵列,我需要按照图片中所示的方式填充它。如果我有一个在每个方向上都有偶数个单元格的数组,我需要在我的数组中挑出一个正方形,并开始计算正方形中的第一个元素。但是如果我有一个奇数个单元格的数组,我需要选择一个数组的中心。

enter image description here

我的主要问题是想出一个可以帮助我到达我的中心的算法。 这是我用来创建和打印数组的代码:

views/spree/order_mailer

1 个答案:

答案 0 :(得分:1)

nxn数组的中心是(floor((n-1)/2),floor((n-1)/2)) [0索引]。但我们会以不同的方式解决它。 如果n是偶数,那么它将以

结束
x x x 16
x 1 x x
x x x x
x x x x

x x x x x 36
x x x x x x
x x 1 x x x
x x x x x x
x x x x x x
x x x x x x

因此,对于偶数n,它总是以[0,n-1]结束。 现在你要做什么来填补它?

您知道这些数字是n*n, n*n-1,n*n-2...2,1

同样适用于n odd

x x x
x 1 x
9 x x

 x x x x x
 x x x x x
 x x 1 x x
 x x x x x
25 x x x x

希望你从这些照片中得到我们想做的事情?

代码

int nc=n*n;
int ans[n][n];
fill ans[][] with -1
int row=n-1,col=0;
if(n&1)
{
while(nc>0)
{
   for(int i=row;i>=0 && ans[i][col]==-1;i--)
   {  
      row--;ans[i][col]=nc; nc--;
   } 
   row++;col++;
   for(int j=col;j<=n-1 && ans[row][j]==-1;j++)
   {
      col++;ans[row][j]=nc; nc--;
   }
   col--;row++;
   for(int i=row;i<=n-1 && ans[i][col]==-1;i++)
   {
      row++;ans[i][col]=nc;nc--;
   }
   row--;col--;
   for(int j=col;j>=0 && ans[row][j]==-1;j--)
   {
     col--;ans[row][j]=nc;nc--;
   }
   col++;row--;
}

}
else

{
    row=0;col=n-1;
    while(nc>0)
    {

       for(int i=row;i<=n-1 && ans[i][col]==-1;i++)
       {
          row++;ans[i][col]=nc;nc--;
       }
       row--;col--;
       for(int j=col;j>=0 && ans[row][j]==-1;j--)
       {
         col--;ans[row][j]=nc;nc--;
       }
       col++;row--;
       for(int i=row;i>=0 && ans[i][col]==-1;i--)
       {  
          row--;ans[i][col]=nc; nc--;
       } 
       row++;col++;db(row);db(col);

       for(int j=col;j<=n-1 && ans[row][j]==-1;j++)
       {
          col++;ans[row][j]=nc; nc--;
       }
       col--;row++;
    }
}
//print ans[n][n]