花了大概两个小时:数组疯狂越界,实在不开心,把数据点放到了中间,这样不会越界了吧,生气。总结起来还是面向过程的思想,行走顺序已经确定下来,实现并不难。
贴代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
int a[100][100];
int b[100][100];
int mid = 50;
a[mid][mid] = 1;
//当前位置
int x = mid,y =mid;
//圈数
int cri = 1;
while ( cri <= n/2)
{
//向右
a[x][y+1] = a[x][y] + 1;
y++;
//向上
while ( x >= mid - cri )
{
a[x-1][y] = a[x][y] + 1;
x--;
}
//向左
x++;
while ( y >= mid - cri )
{
a[x][y -1] = a[x][y] + 1;
y--;
}
//向下
y++;
while ( x <= mid + cri )
{
a[x+1][y] = a[x][y] + 1;
x++;
}
//向右
x--;
while ( y <= mid + cri )
{
a[x][y + 1] = a[x][y]+1;
y++;
}
y--;
cri++;
}
for (int i = mid - n/2; i < n/2 + mid+1; i++)
{
for (int j = mid - n/2; j < n/2 + mid+1; j++)
{
b[i - mid + n/2][j - mid + n/2] = a[i][j];
}
}
int sum =0;
int i = 0,j = 0;
for ( i = 0;i < n;i++)
{
for( j = 0;j < n;j++)
{
cout << b[i][j]<<" ";
if ( i == j || i + j == n - 1)
{
sum += b[i][j];
}
}
cout <<endl;
}
cout<< sum;
return 0;
}