参考代码:
首先定义数组 输入格数
#include <bits/stdc++.h> using namespace std; int a[1100][1100]; int main() { int n; while(cin>>n) { xxxxxxx; } return 0; }
定义x,y为要填充的坐标,
f为方向,i为要填充的数。
#include <bits/stdc++.h> using namespace std; int a[1100][1100]; int main() { int n; while(cin>>n) { memset(a,0,sizeof a); int x,y,i=0,f=2/* 1:上 2:下 3:左 4:右 */; x=1; //x从第一行开始 y=n; //y从最后一列开始 while(1) { i++; //依次填 a[x][y]=i; if(i==n*n) //如果全填完就结束循环 { break; } if(f==1) { x-=1; } else if(f==2) { x+=1; } else if(f==3) { y-=1; } else if(f==4) { y+=1; } } for(int k=1; k<=n; k++) //输出填的数 { for(int j=1; j<=n; j++) { cout<<a[k][j]<<' '; } cout<<endl; } cout<<endl; } return 0; }
如果上面碰边,右面也碰边
方向改为下,上边向下一格
如果右面碰边,下面也碰边
方向改为左,右边向左一格
......以此类推
#include <bits/stdc++.h> using namespace std; int a[1100][1100]; int main() { int n; while(cin>>n) { memset(a,0,sizeof a); int x=1,y,i=0,f=2/* 1:上 2:下 3:左 4:右 */; y=n; int z1=1,z2=n,z3=1,z4=n; //z1:上 z2:下 z3:左 z4:右(壁) while(1) { i++; a[x][y]=i; if(i==n*n) { break; } if(z1==x&&z4==y&&i!=1) { f=2; z1++; } else if(z4==y&&z2==x) { z4--; f=3; } else if(z2==x&&z3==y) { f=1; z2--; } else if(z3==y&&z1==x) { z3++; f=4; } if(f==1) { x-=1; } else if(f==2) { x+=1; } else if(f==3) { y-=1; } else if(f==4) { y+=1; } } for(int k=1; k<=n; k++) { for(int j=1; j<=n; j++) { cout<<a[k][j]<<' '; } cout<<endl; } cout<<endl; } return 0; }
但这时运行
会出现以下情况
#include <bits/stdc++.h> using namespace std; int a[1100][1100]; int main() { int n; while(cin>>n) { memset(a,0,sizeof a); int x=1,y,i=0,f=2/* 1:上 2:下 3:左 4:右 */,b1=-1,b2=-1,b3=-1,b4=-1; y=n; int z1=1,z2=n,z3=1,z4=n; //z1:上 z2:下 z3:左 z4:右 while(1) { b1--; b2--; b3--; b4--; i++; a[x][y]=i; if(i==n*n) { break; } if(z1==x&&z4==y&&i!=1) { f=2; b1=2; } else if(z4==y&&z2==x) { b2=2; f=3; } else if(z2==x&&z3==y) { f=1; b3=2; } else if(z3==y&&z1==x) { b4=2; f=4; } if(f==1) { x-=1; } else if(f==2) { x+=1; } else if(f==3) { y-=1; } else if(f==4) { y+=1; } if(b1==0) { z1+=1; } else if(b2==0) { z4-=1; } else if(b3==0) { z2-=1; } else if(b4==0) { z3+=1; } } for(int k=1; k<=n; k++) { for(int j=1; j<=n; j++) { cout<<a[k][j]<<' '; } cout<<endl; } cout<<endl; } return 0; }
0.0分
5 人评分