从 n 根火柴中取 3 根构成正三角形的取法数量计算方法
### 思路分析 要从 `n` 根火柴里选 3 根组成正三角形,关键在于找出长度相同且数量不少于 3 的火柴。可以先统计每种长度火柴的出现次数,再依据组合数公式计算每种长度能构成正三角形的组合数,最后将所有符合条件的组合数相加。 ### Python 代码实现 ```python # 读取火柴数量 n = int(input()) # 读取每根火柴的长度 lengths = list(map(int, input().split())) # 用于统计每种长度火柴的数量 length_count = {} for length in lengths: if length in length_count: length_count[length] += 1 else: length_count[length] = 1 # 初始化方案数量 total_ways = 0 # 遍历每种长度及其对应的数量 for count in length_count.values(): if count >= 3: # 计算组合数 C(count, 3) total_ways += count * (count - 1) * (count - 2) // 6 # 输出组成方案的数量 print(total_ways) ``` ### C++ 代码实现 ```cpp #include <iostream> #include <unordered_map> using namespace std; // 计算从 m 个元素中选 3 个元素的组合数 int combination(int m) { return m * (m - 1) * (m - 2) / 6; } int main() { int n; cin >> n; unordered_map<int, int> lengthCount; // 读取每根火柴的长度并统计数量 for (int i = 0; i < n; ++i) { int length; cin >> length; lengthCount[length]++; } int totalWays = 0; // 遍历每种长度的火柴数量 for (const auto& pair : lengthCount) { int count = pair.second; if (count >= 3) { totalWays += combination(count); } } cout << totalWays << endl; return 0; } ``` ### 复杂度分析 - **时间复杂度**:$O(n)$,这里的 $n$ 是火柴的数量。主要时间消耗在统计每种长度火柴的数量上。 - **空间复杂度**:$O(k)$,$k$ 是不同长度火柴的种类数,主要用于存储每种长度火柴的数量。 ######[AI问答 | 602点数解答 | 2026-03-01 17:35:57]
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)214
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)220
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)42
- mallshop商城网站:数据库设计与强大业务功能全揭秘(GPT | 257点数解答 | 2024-12-09 14:08:15)266
- R国间谍小C:从S国加密信息中破译军用密码的惊险之旅(字节豆包 | 36点数解答 | 2024-10-19 16:30:40)247
- 揭秘:从十进制到衡三进制的神奇转换及Python实现(DeepSeek | 684点数解答 | 2026-01-20 17:32:06)23
- 用Python处理商品销售数据:替换类别、合并类目并输出前5行(百度文心 | 486点数解答 | 2024-08-23 09:14:21)304
- Python 破解:计算序列中满足特定取余条件元素的数量(字节豆包 | 174点数解答 | 2025-05-13 21:29:55)178
- 一文搞定!无名杀“再生安瓿”技能代码全解析及注意事项(字节豆包 | 464点数解答 | 2025-06-15 20:06:30)148
- C# 实现商品类:数量限制 100 及开发注意要点(字节豆包 | 737点数解答 | 2025-09-03 14:44:56)92
- 易语言多线程实战:获取进程信息、读写内存与多线程协同操作(字节豆包 | 790点数解答 | 2025-11-28 03:08:24)32
- 易语言多线程:实现获取进程内存数据与C语言格式基址的高效代码示例(字节豆包 | 677点数解答 | 2025-11-28 03:12:31)40