```cpp #include <iostream> #include <fstream> #include <vector> #include <algorithm> // 定义一个结构体来表示闭区间 struct Interval { int start; int end; }; // 比较函数,用于按区间的结束位置进行排序 bool compareIntervals(const Interval& a, const Interval& b) { return a.end < b.end; } int main() { // 打开输入文件 std::ifstream inputFile("input.txt"); if (!inputFile.is_open()) { std::cerr << "无法打开文件!" << std::endl; return 1; } int n; // 读取闭区间的数目 inputFile >> n; std::vector<Interval> intervals(n); // 读取每个闭区间的开始和结束值 for (int i = 0; i < n; ++i) { inputFile >> intervals[i].start >> intervals[i].end; } inputFile.close(); // 按区间的结束位置对所有区间进行排序 std::sort(intervals.begin(), intervals.end(), compareIntervals); int count = 0; int lastSelected = -1; // 遍历排序后的区间 for (const auto& interval : intervals) { // 如果当前区间不包含之前选择的整数 if (interval.start > lastSelected) { // 选择当前区间的结束值作为集合中的元素 lastSelected = interval.end; // 集合元素个数加1 ++count; } } // 输出满足条件的最小集合的元素个数 std::cout << count << std::endl; return 0; } ``` 代码解释: 1. 定义`Interval`结构体来表示闭区间,包含`start`和`end`两个成员。 2. `compareIntervals`函数用于按区间的结束位置对区间进行排序。 3. 从文件中读取闭区间的数目和每个区间的开始和结束值。 4. 对所有区间按结束位置进行排序。 5. 遍历排序后的区间,若当前区间不包含之前选择的整数,则选择当前区间的结束值作为集合中的元素,并增加集合元素个数。 6. 输出满足条件的最小集合的元素个数。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 文件操作时,要确保文件能够成功打开,否则会导致程序崩溃。 2. 排序函数的实现要正确,否则可能会影响最终结果。 3. 遍历区间时,要正确判断当前区间是否包含之前选择的整数,避免逻辑错误。 [2025-08-11 16:36:04 | AI写代码神器 | 620点数解答]