魔法矩阵护盾模拟与绝对值求和C++实现
好的!我来为你分别解答这两道题目,并给出完整的 C++ 代码实现。 --- # 📘 第一题:P3650 防御魔法护盾 ## 🧠 问题分析 - 矩阵大小为 `n × m` - 攻击位置 `(x, y)` 是 **1-based** 坐标 - 需要修改三个位置: - 左上方:`(x-1, y-1)` - 正上方:`(x-1, y)` - 右上方:`(x-1, y+1)` - 如果该位置存在(即行号 ≥ 1,列号在 1~m 范围内),则将其改为 `'0'` - 注意攻击点如果在第 1 行,则上方没有位置,无需修改 ## 💻 完整C++代码 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, m; cin >> n >> m; // 读取矩阵(字符之间有空格) vector<vector<char>> matrix(n, vector<char>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> matrix[i][j]; } } int x, y; cin >> x >> y; // 转为0-based索引 int px = x - 1; int py = y - 1; // 上方三个位置:左上、正上、右上 // 行坐标为 px-1,列坐标分别为 py-1, py, py+1 int dx = px - 1; if (dx >= 0) { // 左上方 if (py - 1 >= 0) { matrix[dx][py - 1] = '0'; } // 正上方 matrix[dx][py] = '0'; // 右上方 if (py + 1 < m) { matrix[dx][py + 1] = '0'; } } // 输出结果(字符之间用空格分隔) for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << matrix[i][j]; if (j < m - 1) cout << " "; } cout << endl; } return 0; } ``` ## 🔍 关键点说明 - **坐标转换**:输入是1-based,需要转换为0-based以便数组访问 - **边界检查**: - 攻击点在第1行时,`dx = px - 1 < 0`,直接跳过整个操作 - 左上方:需要检查 `py - 1 >= 0` - 右上方:需要检查 `py + 1 < m` - **输出格式**:要注意题目要求**每个字符之间有空格**,行末不能有多余空格 --- # 📗 第二题:P3688 绝对值之和 ## 🧠 问题分析 - 输入 `n` 个整数 - 对每个整数取绝对值,然后求和 - 数据范围:`n ≤ 1000` ## 💻 完整C++代码 ```cpp #include <iostream> #include <cstdlib> // 包含 abs() using namespace std; int main() { int n; cin >> n; int sum = 0; for (int i = 0; i < n; i++) { int num; cin >> num; sum += abs(num); } cout << sum << endl; return 0; } ``` ## 🔍 关键点说明 - 使用 `abs()` 函数计算绝对值,它定义在 `<cstdlib>` 头文件中 - 逐个读入数字,累加绝对值即可 - 输出结果后换行 --- ## 💡 开发建议 1. **第一题注意输入格式**:字符之间有空格,必须逐个读取字符 2. **第一题注意输出格式**:字符之间有空格,行末无多余空格 3. **第二题**:`abs()` 对 `int` 类型有效,也可以使用 `<cmath>` 中的 `fabs()`,但 `abs()` 更适合整数 4. **边界情况**:第一题务必处理攻击位置在第1行、第1列、第m列的情况 --- ######[AI写代码神器 | 1007点数解答 | 2026-08-27 16:59:01]
- C++ 实现:轻松计算两个矩阵的乘法并输出结果(字节豆包 | 381点数解答 | 2025-12-03 19:20:23)265
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)569
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)482
- Python 实现:根据规则判定 2^n×2^n 方阵中作弊者的赦免命运(字节豆包 | 247点数解答 | 2024-11-03 10:30:46)279
- C语言实现:解决2ⁿ×2ⁿ方阵作弊者赦免问题(字节豆包 | 370点数解答 | 2024-11-03 10:31:31)289
- C语言递归破解2ⁿ×2ⁿ作弊者赦免难题,输出01命运矩阵!(百度文心 | 792点数解答 | 2024-11-03 10:36:04)359
- Python 实现:计算用户输入 n x n 矩阵边界元素之和(GPT | 319点数解答 | 2024-11-21 00:16:05)199
- DevC++ 实现:计算并输出 n×n 矩阵边界元素之和(GPT | 410点数解答 | 2024-11-21 00:19:17)198
- 月赛作弊者命运裁决:2^n×2^n 方阵赦免递归算法揭秘(DeepSeek | 483点数解答 | 2026-01-05 12:24:54)118
- Python 实现:计算特殊规则矩阵行列式并对 109+7 取模(字节豆包 | 672点数解答 | 2026-02-05 20:46:07)139
- C++实现自动化药房配药检查功能(字节豆包 | 701点数解答 | 2026-03-08 10:23:41)95
- P12810 矩阵矩形边界差分法高效解法与 C++ 实现(DeepSeek | 1332点数解答 | 2026-08-20 20:16:44)21