酷代码 AI
菜单
服务商

数字魔方 时间限制:1秒 内存限制: 64 MB 试题描述 把整数1 到n*n(n为奇数)排成一个n*n方阵,使方阵中的每一行,每一列及对角线上的和相同,下图是一个三阶魔方 8 1 6 3 5 7 4 9 2 输入要求 输入n(n为奇数) 输出要求 n阶魔方,数字中间有空格,行尾无空格。 输入样例 3 输出样例 8 1 6 3 5 7 4 9 2 使用c++5.11编写,使用#include<bits/stdc++.h>和using namespace std;

```cpp #include<bits/stdc++.h> using namespace std; const int MAXN = 105; // 定义最大的矩阵边长 int magicSquare[MAXN][MAXN]; // 定义二维数组来存储魔方 int main() { int n; cin >> n; // 输入魔方的阶数 // 初始化魔方所有元素为0 memset(magicSquare, 0, sizeof(magicSquare)); // 确定第一个元素的位置 int row = 0, col = n / 2; magicSquare[row][col] = 1; // 填充魔方 for (int num = 2; num <= n * n; num++) { int nextRow = (row - 1 + n) % n; // 计算上一行 int nextCol = (col + 1) % n; // 计算右一列 if (magicSquare[nextRow][nextCol] == 0) { // 如果该位置未被填充 row = nextRow; col = nextCol; } else { // 如果该位置已被填充 row = (row + 1) % n; // 向下移动一行 } magicSquare[row][col] = num; // 填充当前数字 } // 输出魔方 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j != 0) { cout << " "; } cout << magicSquare[i][j]; } cout << endl; } return 0; } ``` 额外注意的逻辑点 1. 在计算下一个位置时,使用 `(row - 1 + n) % n` 和 `(col + 1) % n` 来处理边界情况,确保不会越界。 2. 当填充位置已被占用时,要正确处理向下移动一行的逻辑,避免出现死循环。 3. 输出时要注意行尾不能有多余的空格,需要进行相应的判断。 [2025-07-20 16:24:49 | AI写代码神器 | 496点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]