AC

せいしゅん404  •  3年前


#include<cstdio> 
#include<iostream> 
using namespace std; 
int a[45][45]={0}; 
int main(void){ 
int n,i,j,k=1; 
scanf("%d",&n); 
i=1; 
j=(n+1)/2; 
a[i][j]=k++; 
while(k<=n*n){ 
 /* 
 *若 (K-1) 在第一行但不在最后一列, 
 *则将K填在最后一行 
 *(K-1) 所在列的右一列; 
 */ 
 if(i==1&&j!=n){ 
  i=n; 
  j=j+1; 
  a[i][j]=k++; 
 } 
 /*若 (K-1) 在最后一列但不在第一行 
 *则将K填在第一列 
 *(K-1) 所在行的上一行 
 */ 
 if(j==n&&i!=1){ 
  j=1; 
  i--; 
  a[i][j]=k++; 
 } 
 /*若 (K-1) 在第一行最后一列 
 *则将K填在 (K-1) 的正下方; 
 */ 
 if(i==1&&j==n){ 
  i++; 
  a[i][j]=k++; 
 } 
 /*若 (K-1) 既不在第一行 
 *也不在最后一列 
 *如果 (K-1) 的右上方还未填数 
 *则将K填在(K-1)的右上方 
 *否则将K填在 (K-1) 的正下方 
 */  
 if(i!=1&&j!=n){ 
  if(a[i-1][j+1]==0){ 
   i--; 
   j++; 
   a[i][j]=k++; 
  }else{ 
   i++; 
   a[i][j]=k++; 
  } 
 } 


for(int i=1;i<=n;i++){ 
 for(int j=1;j<=n;j++){ 
  printf("%d ",a[i][j]); 
 } 
 printf("\n"); 

return 0; 
}


评论:

请先登录,才能进行评论