我这个初学者更好看懂,就是没什么技巧,纯模拟

张绍忠  •  4年前


#include <cstdio> 
#include <iostream> 
using namespace std; 
int main() 

int a[100][100]; 
int i,N; 
cin >>N; 
enum Way{ 
 Down,Left,Up,Right 
};  
for(int i=0;i<N;i++) 
 for(int j=0;j<N;j++) 
  a[i][j]=0; 
   
enum Way way; 
way=Down; 
int pRow=0;int pCol=N-1; 
i=1; 
while(i<=N*N) { 
 a[pRow][pCol]=i++; 
  
 if(way==Down){ 
   if( pRow+1<=N-1 &&  a[pRow+1][pCol]==0){ 
   pRow++; 
  } 
  else { 
  way=Left;pCol--; 
  } 
 continue; 
 } 
 if(way==Left){ 
  if( pCol-1>=0 &&  a[pRow][pCol-1]==0){ 
   pCol--; 
  } 
  else { 
   way=Up;pRow--; 
  } 
  continue; 
 } 
 if(way==Up){ 
  if(pRow-1>=0 &&  a[pRow-1][pCol]==0){ 
   pRow--; 
  } 
  else { 
   way=Right;pCol++; 
  } 
  continue; 
 } 
  
 if(way==Right){ 
  if (pCol+1<=N-1 &&  a[pRow][pCol+1]==0){ 
   pCol++; 
  } 
  else { 
   way=Down;pRow++; 
  } 
  continue; 
 } 

 
for(int i=0;i<N;i++){ 
 for(int j=0;j<N;j++) 
  printf("%2d%s",a[i][j]," ");; 
 cout << "\n"; 

 
return 0; 


评论:

请先登录,才能进行评论