酷代码 AI
菜单
服务商

题目描述 猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 10 种配料(芥末、孜然等),每种配料可以放 1 到 3 克,任意烤鸡的美味程度为所有配料质量之和。 现在, Hanke 想要知道,如果给你一个美味程度 n ,请输出这 10 种配料的所有搭配方案。 输入 一个正整数 n,表示美味程度。 输出 第一行,方案总数。 第二行至结束,10 个数,表示每种配料所放的质量,按字典序排列。 如果没有符合要求的方法,就只要在第一行输出一个 0 样例输入 复制 11 样例输出 复制 10 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1

```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; // 10种配料,每种1-3克,总和范围10-30 if (n < 10 || n > 30) { cout << 0 << endl; return 0; } vector<vector<int>> solutions; vector<int> current(10, 1); // 初始化为全1 // 暴力枚举所有可能的配料组合 for (int a = 1; a <= 3; a++) for (int b = 1; b <= 3; b++) for (int c = 1; c <= 3; c++) for (int d = 1; d <= 3; d++) for (int e = 1; e <= 3; e++) for (int f = 1; f <= 3; f++) for (int g = 1; g <= 3; g++) for (int h = 1; h <= 3; h++) for (int i = 1; i <= 3; i++) for (int j = 1; j <= 3; j++) { if (a + b + c + d + e + f + g + h + i + j == n) { vector<int> solution = {a, b, c, d, e, f, g, h, i, j}; solutions.push_back(solution); } } // 输出结果 cout << solutions.size() << endl; for (const auto& sol : solutions) { for (int k = 0; k < 10; k++) { cout << sol[k]; if (k < 9) cout << " "; } cout << endl; } return 0; } ``` 代码说明: 1. 边界检查:10种配料各放1克时总和为10,各放3克时总和为30。输入n不在[10,30]范围内时直接输出0。 2. 暴力枚举:使用10层循环遍历所有可能的配料组合(3^10 = 59049种情况)。 3. 条件筛选:检查当前组合的总和是否等于目标美味程度n。 4. 结果存储:符合条件的组合存入vector中,自动保持字典序(循环顺序保证了这一点)。 5. 输出格式:第一行输出方案总数,后续每行输出一个方案,数字间用空格分隔。 时间复杂度:O(3^10) ≈ 59049次循环,在合理范围内。 空间复杂度:O(m×10),m为有效方案数。 [2025-12-31 12:27:44 | AI问答 | 596点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多