#include <iostream> //#include <iomanip> #include <cmath> //#include <vector> //#include <algorithm> //#include <map> #include <cstring> using namespace std; int main() { int n; cin>>n; int count=1; //当前要填写的数字 int a[n+1][n+1]; memset(a,0,sizeof(a)); //赋值为0,表示未填数字 int i=1,j=1; //当前正处于的行列位置 a[i][j]=count; count++; int orientation=0; //0右,1下,2左,3上 while(count<=n*n){ switch(orientation%4){ case 0: if(j+1<=n&&a[i][j+1]==0){ a[i][j+1]=count; count++; j++; }else{ orientation++; } break; case 1: if(i+1<=n&&a[i+1][j]==0){ a[i+1][j]=count; count++; i++; }else{ orientation++; } break; case 2: if(j-1>=1&&a[i][j-1]==0){ a[i][j-1]=count; count++; j--; }else{ orientation++; } break; case 3: if(i-1>=1&&a[i-1][j]==0){ a[i-1][j]=count; count++; i--; }else{ orientation++; } break; } } for(int i=1;i<=n;i++){ //打印数组 for(int j=1;j<=n;j++){ if(a[i][j]/10==0){ cout<<" "<<a[i][j]; }else{ cout<<" "<<a[i][j]; } } cout<<endl; } return 0; }
P5731 【深基5.习6】蛇形方阵(C++)
于 2024-01-20 10:12:26 首次发布