// Array.cpp : Defines the entry point for the console application.
//#include "stdafx.h"int n = 5;int array[5][5] = {{0},{0}};
int count = n*n;
int X = -1;
int Y = 0;
int Direct = 1;
int IsEmpty(int pDir)
{
    switch(pDir)
  {
  case 1:
    if(X+1>=n)
       return 1;
       
    return  array[1+X][Y];
    
    break;
  case 2:
    if(Y+1>=n)
      return 1;
      
    return  array[X][1+Y];
    break;
  case 3:
     if(X-1<0)
       return 1;
     
    return  array[X-1][Y];
    
    break;
  case 4:
   if(Y-1<0)
       return 1;
       
    return    array[X][Y-1];
    
    break;
  default:
    break;
  }
}
int main(int argc, char* argv[])
{
for(int i = 0;i < n*n ;i ++)
{
  if(IsEmpty(Direct))
  {
   if(Direct == 4)
       Direct = 1;
    else
       Direct ++;
   }  switch(Direct)
  {
  case 1:
    X++;
    break;
  case 2:
    Y++;
    break;
  case 3:
    X--;
    break;
  case 4:
    Y--;
    break;
  }   array[X][Y] = count--;
}for(int a = 0; a<n;a++)
{
for(int b = 0;b <n;b++)
{
printf("%d    ",array[a][b]);
}
printf("\n");
} return 0;
}

解决方案 »

  1.   

    关键是定位问题。定义一个二维数组,每维的长度就是n的值。 class Test
    {
    int n;
    object[] iArrLine;
    internal Test(int iSize)
    {
    n=iSize;
    iArrLine=new object[n];
    for(int i=0;i<n;i++) 
    {
    iArrLine[i]=new object[n];
    for(int j=0;j<n;j++)
    (iArrLine[i] as object[])[j]=null;
    }
    } internal void DoIt()
    {
    this.MakeIt();
    foreach(object objLine in iArrLine)
    {
    foreach(object obj in (objLine as object[]))
    Console.Write("\t"+obj);
    Console.WriteLine();
    }
    }
    int iCurCol=0;
    int iCurRow=0;
    int iDir=1; void MakeIt()
    {
    for(int i=n*n;i>0;i--)
    {
    (iArrLine[iCurRow] as object[])[iCurCol]=i;
    if(i==1)
    break;
    NextPos();
    }
    }
    void NextPos()
    {
    switch(iDir)
    {
    case 1://向下
    if(iCurRow==n-1||(iArrLine[iCurRow+1] as object[])[iCurCol]!=null)
    {
    iDir=2;
    NextPos();
    }
    else
    iCurRow++;
    break;
    case 2://向右
    if(iCurCol==n-1||(iArrLine[iCurRow] as object[])[iCurCol+1]!=null)
    {
    iDir=3;
    NextPos();
    }
    else
    iCurCol++;
    break;
    case 3://向上
    if(iCurRow==0||(iArrLine[iCurRow-1] as object[])[iCurCol]!=null)
    {
    iDir=4;
    NextPos();
    }
    else
    iCurRow--;
    break;
    case 4://向右
    if(iCurCol==0||(iArrLine[iCurRow] as object[])[iCurCol-1]!=null)
    {
    iDir=1;
    NextPos();
    }
    else
    iCurCol--;
    break;
    }
    }