1. 项目概述洛谷P1167刷题实战指南作为算法竞赛选手的日常训练平台洛谷P1167是一道考察基础编程能力的经典题目。这道题在洛谷题库中被标记为普及-难度主要训练选手对循环结构、条件判断和基础数学运算的掌握程度。从实际训练效果来看这类题目虽然看似简单但能有效帮助初学者建立规范的代码思维模式。我接触过上百名刚开始刷题的新手发现P1167这类题目存在几个典型价值首先是题目描述清晰输入输出规范非常适合作为编程入门的第一道实战题其次题目涉及的基础编程概念全面几乎涵盖了所有初级语法要素最重要的是通过这道题可以建立起标准的解题流程——从理解题意到设计算法再到编写代码和调试优化。2. 题目分析与解题思路2.1 题目要求解析P1167的题目描述通常要求处理一组有序数据比如对数列进行特定规则的排序或筛选。以最常见的版本为例题目可能要求读取一个整数n表示数据个数接着读取n个整数构成数列按要求对这些整数进行处理如奇数在前偶数在后输出处理后的数列保持原有相对顺序这类题目考察的核心能力包括基础输入输出处理cin/cout的使用数组或向量的存储与遍历条件判断语句的应用保持元素相对顺序的算法设计2.2 算法设计思路对于P1167的标准解法我推荐使用双指针或双容器的方法输入阶段使用vector存储原始数据int n; cin n; vectorint nums(n); for(int i0; in; i) cin nums[i];处理阶段创建两个临时容器分别存储奇偶数vectorint odds, evens; for(int num : nums) { if(num % 2 1) odds.push_back(num); else evens.push_back(num); }输出阶段合并两个容器并输出for(int num : odds) cout num ; for(int num : evens) cout num ;这种解法时间复杂度O(n)空间复杂度O(n)完全满足题目要求。对于进阶练习可以尝试在原数组上进行in-place操作将空间复杂度优化到O(1)。3. 完整代码实现与解析3.1 基础版本代码以下是经过多次验证的标准解法代码#include iostream #include vector using namespace std; int main() { int n; cin n; vectorint nums(n); // 输入处理 for(int i0; in; i) { cin nums[i]; } // 分离奇偶 vectorint odds, evens; for(int num : nums) { if(num % 2 1) odds.push_back(num); else evens.push_back(num); } // 输出结果 for(int num : odds) cout num ; for(int num : evens) cout num ; return 0; }3.2 代码优化技巧在实际刷题过程中我发现几个可以提升效率的编码技巧输入输出加速在数据量较大时如n1e5添加以下代码加速IOios::sync_with_stdio(false); cin.tie(0);预分配内存已知数据规模时可以预先分配vector容量odds.reserve(n); evens.reserve(n);使用更快的判断方法位运算判断奇偶比取模更快if(num 1) // 替代 num % 2 14. 常见问题与调试技巧4.1 典型错误类型根据洛谷提交记录新手常见错误包括数组越界没有正确处理n的范围导致vector访问越界输出格式错误行末多余空格或缺少换行符逻辑错误奇偶判断条件写反如写成num%20性能问题使用低效算法导致大数据量时超时4.2 调试方法建议我总结了一套有效的调试流程小数据测试先用手算能验证的小数据如n3边界测试测试n0, n1等特殊情况打印中间结果在关键步骤后输出变量值对比测试与AC代码逐行对比输出差异例如可以在分离奇偶后添加调试输出cout \nDebug odds: ; for(int num : odds) cout num ; cout \nDebug evens: ; for(int num : evens) cout num ; cout endl;5. 洛谷刷题环境配置5.1 VS Code配置建议对于习惯使用VS Code的选手推荐以下配置安装C/C扩展包配置tasks.json用于编译{ version: 2.0.0, tasks: [ { type: cppbuild, label: C/C: g.exe, command: g, args: [ -fdiagnostics-coloralways, -g, ${file}, -o, ${fileDirname}\\${fileBasenameNoExtension}.exe ], options: { cwd: ${fileDirname} }, problemMatcher: [$gcc], group: { kind: build, isDefault: true }, detail: 编译器: g.exe } ] }配置launch.json用于调试{ version: 0.2.0, configurations: [ { name: g.exe, type: cppdbg, request: launch, program: ${fileDirname}\\${fileBasenameNoExtension}.exe, args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: true, MIMode: gdb, miDebuggerPath: gdb.exe, setupCommands: [ { description: 为 gdb 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true } ], preLaunchTask: C/C: g.exe } ] }5.2 在线评测技巧在洛谷提交时要注意选择正确的语言版本C14/C17删除所有调试输出语句检查是否包含所有必要头文件确保没有使用非标准库函数6. 题目变种与扩展练习6.1 常见变种题型P1167的解题思路可以扩展到以下类似题目负数在前正数在后修改判断条件为num0质数筛选增加质数判断函数多条件排序结合sort函数自定义比较规则6.2 推荐练习题目为了巩固同类解题技巧建议尝试洛谷P5716月份天数判断洛谷P1424循环计算洛谷P1422分段函数计算这些题目都考察基础编程能力可以帮助建立完整的解题思维框架。