#include<bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方向数组 下左上右
int main()
{
int a[25][25] = {}, k = 1, n, fx, fy, d = 0, x, y;//fx, fy当前焦点位置 x,y下一个位置 d:方向
cin >> n;
fx = 1, fy = 1;
while(k <= n*n)
{
a[fx][fy] = k++; // 赋值
x = fx + dir[d][0], y = fy + dir[d][1]; //下一个位置
if(a[x][y] != 0 || x > n || x < 1 || y > n || y < 1)//如果新位置上已经有值了或移出了二维数组范围
d = (d + 1) % 4;//变换方向
fx += dir[d][0], fy += dir[d][1];//更新焦点位置
}
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
cout << a[i][j] << ' ';
cout << endl;
}
return 0;
}
有趣的数字图形 C++
最新推荐文章于 2024-07-03 13:12:32 发布