正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2017 第一轮真题 › 第 24 题
NOIP 提高 2017 第一轮 第 24 题:构造奇数阶幻方
题目
```cpp
#include <iostream>
using namespace std;
int main() {
int n, i, j, x, y, nx, ny;
int a[40][40];
for (i = 0; i < 40; i++)
for (j = 0; j < 40; j++)
a[i][j] = 0;
cin >> n;
y = 0;
x = n - 1;
n = 2 * n - 1;
for (i = 1; i <= n * n; i++) {
a[y][x] = i;
ny = (y - 1 + n) % n;
nx = (x + 1) % n;
if ((y == 0 && x == n - 1) || a[ny][nx] != 0)
y = y + 1;
else {
y = ny; x = nx;
}
}
for (j = 0; j < n; j++)
cout << a[0][j] << " ";
cout << endl;
return 0;
}
```
输入:3
输出:_________本小题
请写出程序的输出结果。
答案
17241815
题解
考点定位
奇数阶幻方的实际规模与输出。
解题过程
输入 n=3 后,先设 y=0、x=n−1=2,再执行 n=2*n−1,使幻方阶数变为 5。初始位置因此是 5×5 方阵的第一行中间列。
按程序“右上移动、越界回绕、遇到已填格则下移”的规则,得到:
| 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 |
程序只输出第一行,各数字后有空格,所以输出为 17 24 1 8 15。站内判分会忽略空白,与存储的紧凑答案 17241815 等价。
答案:17 24 1 8 15。
易错提醒
输入 n 与变换后的阶数不是同一个值;也不要把初始位置误认为变换后方阵的右上角。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号