酷代码 AI
菜单

c++在一个古老的部落里,有一个关于天气之子的试炼。 试炼将会给出连续 n n 天的天气情况。每种天气被一个正整数编号。相同的正整数表示同一种天气。 每一天前,接受天气之子试炼的成员们必须每天给出当天的天气预报。预报准确率最高的会成为部落的天气之子。 你想出了一个奇妙的预报方法: 第一天预报天气为 <天气类型1>。从第二天开始: 若前一天预报成功,预报的天气类型保持不变。 若预报失败,统计前面所有天中的最多的天气(多种天气都是最多时,预报其中该天气第一次出现最晚的天气种类),修改当天的预报为该天气。 你的任务是计算你的预报成功天数。 回答篇幅:简单明了

以下是实现该功能的C++代码: ```cpp #include <iostream> #include <vector> #include <unordered_map> #include <algorithm> // 计算预报成功天数的函数 int calculateSuccessDays(const std::vector<int>& weather) { int n = weather.size(); if (n == 0) return 0; int successDays = 0; int forecast = weather[0]; // 第一天预报天气为天气类型1 for (int i = 0; i < n; ++i) { if (forecast == weather[i]) { ++successDays; } else { std::unordered_map<int, int> count; std::unordered_map<int, int> firstOccurrence; for (int j = 0; j <= i; ++j) { ++count[weather[j]]; if (firstOccurrence.find(weather[j]) == firstOccurrence.end()) { firstOccurrence[weather[j]] = j; } } int maxCount = 0; int nextForecast = 0; for (const auto& pair : count) { if (pair.second > maxCount || (pair.second == maxCount && firstOccurrence[pair.first] > firstOccurrence[nextForecast])) { maxCount = pair.second; nextForecast = pair.first; } } forecast = nextForecast; } } return successDays; } int main() { std::vector<int> weather = {1, 2, 1, 3, 2}; // 示例天气数据 int successDays = calculateSuccessDays(weather); std::cout << "预报成功天数: " << successDays << std::endl; return 0; } ``` 代码解释: 1. 函数 `calculateSuccessDays`: - 接收一个整数向量 `weather` 表示连续 `n` 天的天气情况。 - 初始化 `successDays` 为 0,`forecast` 为第一天的天气类型。 - 遍历每一天的天气: - 如果预报的天气和当天实际天气相同,`successDays` 加 1。 - 如果预报失败,统计前面所有天中各种天气的出现次数和第一次出现的位置。 - 找出出现次数最多且第一次出现最晚的天气类型,更新 `forecast`。 2. 主函数 `main`: - 定义一个示例的天气数据向量 `weather`。 - 调用 `calculateSuccessDays` 函数计算预报成功天数并输出结果。 [2026-01-27 20:12:05 | AI问答 | 614点数解答]

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