题目描述:
这个程序实际上是要打印一个N*N的螺旋矩阵,在螺旋矩阵的中心位置输出T。
思路:
题目说n 是个奇数,可以从(1,1) 开始,向右走到头,然后右转,然后走到头,然后再右转,然后再走到头,然后再右转……直到填满。
我的程序中j是控制向左填还是向右填的,i是控制向上填还是向下填的。
还有什么问题可以看代码注释。
代码:
#include<bits/stdc++.h>
using namespace std;
int num[46][46],n;
int main(){
num[1][1]=1;//初始为1
cin>>n;
for(int i=1,j=1,tot=1;tot<n*n;){//一直填到n*n个数填完
while(++j<=n&&!num[i][j]) num[i][j]=++tot;
--j;//向右
while(++i<=n&&!num[i][j]) num[i][j]=++tot;
--i;//向下
while(--j> 0&&!num[i][j]) num[i][j]=++tot;
++j;//向左
while(--i> 0&&!num[i][j]) num[i][j]=++tot;
++i;//向上
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(num[i][j]!=n*n) cout<<num[i][j]<<" ";//输出
else cout<<"T ";
}
cout<<endl;
}
return 0;
}