解封我的CSDN...

 开学后沉迷学习无法自拔(其实是懒),忘记写博客来记录我的学习生涯,直至现在寒假了才想起,现决定解封我的CSDN。

刚刚看了下我的第一篇博客(我都差点忘记我写过博客。。。),当时初学编程,那道题的思路完全是错的...... 最恐怖的是还有

几十个人看了那篇QAQ。 大一第一学期已经过去了,学了一个学期ACM,我越来越觉得师兄刚开始说的"人与人之间的差

距有时候可能比人比猪还大"这句话特别在理,同届生恐怖得像魔鬼一样。。。 虽然我现在还不能望其项背,但我还是会坚持

下去。解封之际,先附上上篇博客中那道五个多月前难住我的题的实现代码。

先复述一遍题目

 输入一个n,输出一个螺旋向内递增的从1到n^2的n阶方阵(如下图)


代码如下:

#include<iostream>
#include<cstring>
using namespace std;

int map[10][10];
void build(int n)
{ 
    int x = 0;
    int y = 0;
    int tot = map[x][y] = 1;
    while(tot<n*n)
    {
        while(y<n-1&&!map[x][y+1])//最外面一层时遇到边界(-1或n)时停止循环,内层遇到下一个位置为非0(即外层数字已填入)时停止循环 
        {						   
        	map[x][++y] = ++tot;
		}
        while(x<n-1&&!map[x+1][y])
            map[++x][y] = ++tot;
        while(y>=1&&!map[x][y-1])
            map[x][--y] = ++tot;
        while(x>=1&&!map[x-1][y])
            map[--x][y] = ++tot;
    }
}


void show(int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<map[i][j];
            if(j==n-1)
                cout<<endl;
            else
                cout<<' ';
            //PS:懒得打输出右对齐了,就这样了。。。 
        }
    }
}


int main()
{
    int n;
    while(cin>>n)
    {
        memset(map,0,sizeof(map));//没填入的都清0,方便边界判断 
        build(n);
        show(n);
        cout<<endl; 
    }
}






posted @ 2018-02-02 22:39  Apale  阅读(31)  评论(0编辑  收藏  举报