这篇文章给大家带来 GESP 四级样题卷编程题的第2题:填幻方。
题目链接
(1)完成输入
输入一个正奇数,数据范围在 3 < = N < = 21 3<=N<=21 3<=N<=21,因此选用 int。
int N;
cin>>N;
(2)分析题意
根据题目意思,可知这是一个二维数组,范围是 N × N N\times N N×N,所以定义一个 int 类型的二维数组,范围可以稍微大一些。
根据要求,一开始正方形中没有填任何数字,要实现这个,需要将二维数组写在主函数之前,确保数据全部为0。
也可以使用嵌套循环,将二维数组的所有数值赋值为0。
//可以写在主函数之前
int HF[25][25];
//嵌套循环赋值为0
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
HF[i][j]=0;
}
}
第一行的正中央填 1,因为 N 为奇数,我们从二维数组的下标 0 开始,正中央的行的下标为 0,列的下标为: N / 2 N/2 N/2。
HF[0][N/2]=1;//正中央填入1
第二步,从上次填数字的位置向上移动一格,如果已经在第一行,则移到同一列的最后一行,再向右移动一格,如果已经在最右一列,则移动至同一行的第一列。
如果移动后的位置没有填数字,则把上次填写的数字的下一个数字填到这个位置。
考虑到要移动,所以需要将位置用变量存储起来。
int x=0;
int y=N/2