怎么用阿里云建网站,汽修网站建设免费,wordpress 菜单路径,云开发参数题目描述
幻方是一种很神奇的 N \times NNN 矩阵#xff1a;它由数字 1,2,3, \ldots ,N \times N1,2,3,…,NN 构成#xff0c;且每行、每列及两条对角线上的数字之和都相同。
当 NN 为奇数时#xff0c;我们可以通过以下方法构建一个幻方#xff1a; 首先将 11 写在第一行…题目描述
幻方是一种很神奇的 N \times NN×N 矩阵它由数字 1,2,3, \ldots ,N \times N1,2,3,…,N×N 构成且每行、每列及两条对角线上的数字之和都相同。
当 NN 为奇数时我们可以通过以下方法构建一个幻方 首先将 11 写在第一行的中间。 之后按如下方式从小到大依次填写每个数 KKK 2,3, \ldots ,N \times NK2,3,…,N×N
若 (K - 1)(K−1) 在第一行但不在最后一列则将 KK 填在最后一行(K - 1)(K−1) 所在列的右一列若 (K - 1)(K−1) 在最后一列但不在第一行则将 KK 填在第一列(K - 1)(K−1) 所在行的上一行若 (K - 1)(K−1) 在第一行最后一列则将 KK 填在 (K - 1)(K−1) 的正下方若 (K - 1)(K−1) 既不在第一行也不在最后一列如果 (K - 1)(K−1) 的右上方还未填数则将 KK 填在 (K - 1)(K−1) 的右上方否则将 KK 填在 (K - 1)(K−1) 的正下方。
现给定 NN请按上述方法构造 N \times NN×N 的幻方。
输入格式
输入只有一行包含一个整数即幻方的大小。
输出格式
输出包含 NN 行每行 NN 个整数即按上述方法构造出的 N \times NN×N 的幻方。相邻两个整数之间用单个空格隔开。
样例
输入数据 1
3Copy
输出数据 1
8 1 6
3 5 7
4 9 2Copy
数据范围与提示
对于 100\%100% 的数据1 \leq N \leq 391≤N≤39 且为奇数。
代码:
#include bits/stdc.h
using namespace std;
int in;
int circle[1000][1000];
int key_X, key_Y, i;
int main() {scanf(%d, in);in (in 1) / 2;key_Y in - 1;while (i (2 * in - 1) * (2 * in - 1)) {i;circle[key_X][key_Y] i;if (key_X 0 key_Y ! 2 * in - 2) {key_X 2 * in - 2;key_Y;} else if (key_Y 2 * in - 2 key_X ! 0) {key_Y 0;key_X--;} else if ((key_X 0 key_Y 2 * in - 2) || (circle[key_X - 1][key_Y 1] ! 0)) {key_X;} else {if (key_X 0)key_X 2 * in - 2;elsekey_X--;if (key_Y 2 * in - 2)key_Y 0;elsekey_Y;}}for (int i1 0; i1 2 * in - 1; i1) {for (int i2 0; i2 2 * in - 1; i2) {printf(%d , circle[i1][i2]);}printf(\n);}return 0;
}