用 C++ 解决计算连续相等数个数问题
以下是一个用 C++ 编写的程序,用于解决乌拉乎的问题。该程序的主要功能是对于给定的一组数(数量少于 100),计算以每个数作为终点时,有多少个连续相等的数。 ```cpp #include <iostream> #include <vector> // 函数用于计算以每个数作为终点时连续相等数的个数 std::vector<int> countConsecutiveEqual(const std::vector<int>& numbers) { int n = numbers.size(); std::vector<int> result(n, 1); // 初始化结果数组,每个元素初始值为 1 // 遍历数组,从第二个元素开始 for (int i = 1; i < n; ++i) { if (numbers[i] == numbers[i - 1]) { // 如果当前元素和前一个元素相等,则更新当前元素的连续相等数个数 result[i] = result[i - 1] + 1; } } return result; } int main() { int n; std::cout << "请输入数的个数(n < 100): "; std::cin >> n; // 检查输入的数的个数是否小于 100 if (n >= 100) { std::cout << "输入的数的个数必须小于 100。" << std::endl; return 1; } std::vector<int> numbers(n); std::cout << "请输入 " << n << " 个数: "; for (int i = 0; i < n; ++i) { std::cin >> numbers[i]; } // 调用函数计算连续相等数的个数 std::vector<int> consecutiveCounts = countConsecutiveEqual(numbers); // 输出结果 std::cout << "以每个数作为终点的连续相等数的个数为: "; for (int count : consecutiveCounts) { std::cout << count << " "; } std::cout << std::endl; return 0; } ``` ### 代码解释: 1. **`countConsecutiveEqual` 函数**: - 该函数接受一个整数向量 `numbers` 作为参数,返回一个整数向量 `result`,其中 `result[i]` 表示以 `numbers[i]` 作为终点的连续相等数的个数。 - 首先,初始化 `result` 数组,每个元素的初始值为 1,因为每个数至少有一个连续相等的数(即它本身)。 - 然后,从第二个元素开始遍历数组,如果当前元素和前一个元素相等,则将当前元素的连续相等数个数更新为前一个元素的连续相等数个数加 1。 2. **`main` 函数**: - 首先,提示用户输入数的个数 `n`,并检查 `n` 是否小于 100。如果 `n` 不小于 100,则输出错误信息并终止程序。 - 接着,提示用户输入 `n` 个数,并将这些数存储在 `numbers` 向量中。 - 调用 `countConsecutiveEqual` 函数计算连续相等数的个数,并将结果存储在 `consecutiveCounts` 向量中。 - 输出以每个数作为终点的连续相等数的个数。 ### 复杂度分析: - **时间复杂度**:$O(n)$,其中 $n$ 是输入数组的长度。因为只需要遍历数组一次。 - **空间复杂度**:$O(n)$,主要用于存储结果数组。 ######[AI问答 | 855点数解答 | 2026-03-21 19:57:08]
- 星际编码大赛终极对决:机械星AI与异星人激战“逆序对”统计难题(字节豆包 | 509点数解答 | 2025-04-19 17:33:00)277
- C++ 实现:根据给定正整数构造 3×3 方阵并计算满足条件的方案数(阿里通义 | 875点数解答 | 2024-11-13 16:38:24)247
- C++实现:低复杂度求解 3×3 方阵构造方案数(阿里通义 | 708点数解答 | 2024-11-13 16:45:15)282
- 深入解析洛谷打卡系统:规则揭秘与代码实现(字节豆包 | 316点数解答 | 2025-11-16 19:45:59)103
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)135
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)154
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)66
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)24
- C++实现戴夫后院抵御僵尸的植物选择策略(DeepSeek | 773点数解答 | 2026-01-19 19:20:57)42
- 高效计算逆序对:归并排序分治法详解与Python实现(阿里通义 | 1144点数解答 | 2026-03-18 17:49:11)15
- Golang开发必知:两种方法实现Map相等比较(百度文心 | 432点数解答 | 2023-11-09 18:11:21)273
- 「alfr round 3」b:巧用贪心与栈,求解序列swap & delete最小操作数(百度文心 | 637点数解答 | 2024-12-21 14:56:50)321