护盾晶石分配方案求解器——C++实现
根据题意,我们需要找到所有满足以下条件的正整数解(允许为0): - 红晶石数量 r,蓝晶石数量 b,绿晶石数量 g - r + b + g = m - 5r + 3b + g = n - r, b, g >= 0 由两个方程可得: - g = m - r - b - 代入能量方程:5r + 3b + (m - r - b) = n - 简化:4r + 2b + m = n - 得到:2r + b = (n - m) / 2 我们需要 (n - m) 必须是偶数,且 (n - m) / 2 >= 0,否则无解。 然后枚举 r 从 0 到 (n - m) / 4(因为 b = (n - m)/2 - 2r >= 0),计算 b 和 g,并检查是否非负且总量为 m。 以下是完整的 C++ 代码: ```cpp #include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; // 检查可行性 if ((n - m) % 2 != 0 || n < m) { // 无解,不输出任何内容 return 0; } int d = (n - m) / 2; // d = 2r + b // 枚举红晶石数量 r for (int r = 0; 2 * r <= d; ++r) { int b = d - 2 * r; // 蓝晶石数量 if (b < 0) break; int g = m - r - b; // 绿晶石数量 if (g >= 0) { cout << r << " " << b << " " << g << endl; } } return 0; } ``` ### 代码解释 - 首先检查 (n - m) 是否为偶数且非负,否则输出空。 - 令 d = (n - m) / 2,则满足 2r + b = d。 - 遍历 r 从 0 到 d/2,计算 b = d - 2r,若 b >= 0 且 g = m - r - b >= 0,则输出方案。 - 输出顺序为红、蓝、绿,每行一个方案。 ### 示例验证 - 输入:`10 4` n - m = 6,d = 3 枚举 r: r=0: b=3, g=1 → 0 3 1 r=1: b=1, g=2 → 1 1 2 r=2: b=-1 停止 输出两行,正确。 - 输入:`12 5` n - m = 7,奇数,无解,输出为空,符合条件。 ######[AI问答 | 681点数解答 | 2026-08-22 21:44:05]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)565
- 工程师必备:十大APP性能优化方案大揭秘(百度文心 | 300点数解答 | 2023-11-09 18:31:04)424
- 含不规则缺陷原材料的最优切割方案建模与损失率、利用率计算(DeepSeek | 2367点数解答 | 2025-05-10 23:47:30)352
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)478
- iOS开发:手把手教你完整实现代理模式,含声明与实现步骤!(阿里通义 | 268点数解答 | 2023-11-08 00:39:55)356
- JavaScript 开发:用 Animation 实现自定义动画的简易教程 (阿里通义 | 333点数解答 | 2023-11-09 01:50:07)329
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)612
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)485
- Vue.js 与 Matter.js 碰撞:轻松实现物理模拟全攻略 (讯飞星火 | 522点数解答 | 2024-05-29 22:26:06)519
- JS实现移动端网页快捷键创建方式及注意事项(阿里通义 | 284点数解答 | 2024-06-05 19:02:59)327
- 车载系统 UML 类图设计:涵盖 Car、Engine、娱乐系统等的完整类定义与关系解析 (字节豆包 | 760点数解答 | 2024-08-15 22:51:04)399
- Java 继承实现:重温经典剪刀石头布游戏(字节豆包 | 451点数解答 | 2024-10-20 19:57:58)548