正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 提高 2017 第一轮真题 › 第 24 题

NOIP 提高 2017 第一轮 第 24 题:构造奇数阶幻方

阅读程序 · 枚举与模拟 · 答案 17241815

题目

```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 方阵的第一行中间列。

按程序“右上移动、越界回绕、遇到已填格则下移”的规则,得到:

17241815
23571416
46132022
101219213
11182529

程序只输出第一行,各数字后有空格,所以输出为 17 24 1 8 15。站内判分会忽略空白,与存储的紧凑答案 17241815 等价。

答案:17 24 1 8 15。

易错提醒

输入 n 与变换后的阶数不是同一个值;也不要把初始位置误认为变换后方阵的右上角。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号