せいしゅん404 • 4年前
#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;
}
评论:
请先登录,才能进行评论