奇阶幻方
实现这个矩阵
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
使用的方法-- 楼梯法
楼梯法
往右上移动
如果到了边界位置:
到最上一行,回到最下一行
到最右一列,回到最左一列
如遇到已经赋值过了的位置,则向下移动
特别注意
在右上角的位置时,使用楼梯法需特别注意
应向下移动 ,而不是到最左下角
代码实现
#include<stdio.h>
int main(){
int a[5][5]={0};
int b[5][5]={0};
int i,j,k,cnt,x,y;
cnt=1;
x=0;y=2;
while(cnt<26){
//判断右上角的位置
if(x==-1&&y==5){
x=1;y=4;
}
//到最上一行,回到最下一行
if(x<0){
x=x+5;
}
//到最右一列,回到最左一列
if(y>4){
y=y-5;
}
//判断是否已经赋值过
if(b[x][y]==1){
x++;
x++;
y--;
}
//向右上移动
a[x][y]=cnt;
cnt++;
b[x][y]=1;
x--;
y++;
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%2d ",a[i][j]);
}
printf("\n");
}
return 0;
}
不合理的地方希望在评论区提出 谢谢。