解封我的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; } }