CCF CSP 2018.03:序列处理与模拟题C++满分代码解析

需积分: 45 7 下载量 110 浏览量 更新于2024-09-08 收藏 72KB DOCX 举报
本资源提供的是CCF CSP软件能力认证2018年3月第13次考试的两道题目及其解析和100分的C++代码实现。第一题名为“跳一跳”,考察序列处理能力。题目要求处理一个输入序列,其中的数字代表分数,当连续得分2分时加分规则为每次加2分,得1分时不加分。核心代码通过`scanf`读取输入,累计分数并根据规则调整加分状态。 ```cpp #include<iostream> using namespace std; int main() { int a, sum = 0, plus = 0; while (scanf("%d", &a) != EOF && a) { sum += a; if (a == 1) plus = 0; else if (a == 2) { sum += plus; plus += 2; } } printf("%d\n", sum); return 0; } ``` 第二题是“碰撞的小球”,模拟题目,需要按照时间序列模拟小球的运动,判断小球是否相撞并调整方向。提供了两种解法:一种是不排序的暴力法,使用数组`pos`和`step`记录小球位置和运动方向;另一种是结构数组法,通过排序简化处理。暴力法的核心代码如下: ```cpp #include<iostream> using namespace std; const int L = 1000; int pos[L + 1], step[L + 1]; int main() { int n, l, t; cin >> n >> l >> t; for (int i = 0; i < n; i++) { cin >> pos[i]; // 其他代码处理小球移动和碰撞检测 } // ...模拟过程 return 0; } ``` 总结来说,这两道题目都是对基础编程技能的考察,特别是输入处理、循环控制和数组操作,同时也涉及到了模拟算法和优化技巧。通过解答这些题目,考生可以提升对C++语言的理解,以及在实际编程中处理类似问题的能力。