解封我的CSDN...

2/2/2018

 开学后沉迷学习无法自拔(其实是懒),忘记写博客来记录我的学习生涯,直至现在寒假了才想起,现决定解封我的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; } }







Last Updated: 4/3/2022, 12:55:14 AM