螺旋阵列

/*       C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛

                82   81   80   79   78   77   76   75   74   73

                83   50   49   48   47   46   45   44   43   72

                84   51   26   25   24   23   22   21   42   71

                85   52   27   10    9    8    7   20   41   70

                86   53   28   11    2    1    6   19   40   69

                87   54   29   12    3    4    5   18   39   68

                88   55   30   13   14   15   16   17   38   67

                89   56   31   32   33   34   35   36   37   66

                90   57   58   59   60   61   62   63   64   65

                91   92   93   94   95   96   97   98   99  100*/


//看到这个方阵,一想到的就是找规律。这个题目规律只有两个 转圈 自加
//转圈就要给数组元素定位,主要做的工作就是找规律然后根据规律用for简化,然后再赋值。
//如果把一圈当作一个循环的话,那整体循环N/2次

#include <iostream>
using namespace std;
int main()
{
        const int N=10;//这个就不说了
        
        //先建立一个二维数组
        int a[N][N];
        
        //为了观察运行出的错,先把数组各个元素通通赋为0吧,这样一来,有什么错误在运行时候,一看就能看出来。
        for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                {
                        a[i][j]=0;
                }
        
        
        
        //试了一下从1赋值,感觉很费事,还是从后往前推吧,最后一个数字是N*N
        int last=N*N;
        int n=N;    //中间变量。
        int i=n-1,j;//第一个循环要用到i(第54行),所以赋个初值
        for(int k=0;k<N/2;k++)//如果把一圈当作一个循环的话,那整体循环N/2次
        {
                
                for(j=n-1;j>k;j--)//给100-92赋值
                        a[i][j]=last--;
                for(i=n-1;i>k;i--)//给91-83赋值
                        a[i][j]=last--;
                for(;j<n-1;j++)   //给82-74赋值
                        a[i][j]=last--;
                for(;i<n-1;i++)   //给73-65
                        a[i][j]=last--;
                //最外面的一圈赋值完成了,进行下一圈。
                n--;i--;
        }
        
        //显示数组各个元素
        for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        {
                cout<<a[i][j]<<"\t";
                if(j==N-1)         //这要注意换行。
                        cout<<endl<<endl;
        }
        return 0;
}


上一篇:c++在运行期间不会自动检查数组是否越界,设计一个类检查数组是否越界


下一篇:网上找到的题目