
1. 从一份CSP-J初赛题说起为什么我要把试题做成Markdown每年CSP-J/S第一轮认证结束之后信息学圈子里最热闹的事情之一就是各路选手、教练、家长开始对答案、估分、复盘。我这些年带过几届学生也帮不少朋友整理过初赛真题和解析慢慢发现一个很现实的问题网上流传的试题版本五花八门有的是截图有的是PDF有的是别人手打的Word格式乱、公式错、选项缺甚至同一道题在不同版本里答案都不一样。等到你想把这些题目整理成一份能长期维护、方便检索、还能直接给学生练习的资料时才发现原始素材根本没法用。所以这次我干脆自己动手把CSP-J2026第一轮试题完整整理成Markdown格式配上逐题解析并且把源码也一并保留下来。Markdown这个格式的好处用过的人都知道纯文本、跨平台、版本可控、方便二次加工。你可以用Typora看可以用VS Code看可以丢进任何支持Markdown的阅读器里甚至可以直接转成Word、PDF、网页。对于试题这种需要反复修订、多人协作的内容来说Markdown几乎是目前最省心的载体。这篇文章不是简单地贴一份题目和答案而是想把我整理这套资料的全过程拆开讲清楚为什么选Markdown而不是Word或PDF、试题结构怎么设计、公式和表格怎么处理、解析写到什么颗粒度、源码怎么组织、后续怎么转成其他格式。如果你也是教练、选手或者只是想把某类考试资料整理成可维护的文档这套思路可以直接拿去用。关键词里提到的CSP-J、Markdown、初赛真题、知识点博客都会在下面逐一展开。2. 为什么试题资料适合用Markdown来承载2.1 试题文档的三个核心痛点先说说我为什么对Word和PDF做试题资料这么抵触。第一个痛点是公式和特殊符号。CSP-J初赛里虽然不像数学竞赛那样有大量复杂公式但二进制、十六进制、逻辑运算、排列组合、时间复杂度表达式这些内容用Word打出来经常出现字体错乱、上下标丢失的问题。PDF更麻烦你想改一个选项得找到原始工程文件否则只能重新排版。第二个痛点是版本管理。一份试题从初稿到最终版中间可能要改十几处题干表述、选项顺序、答案修正、解析补充。用Word的话每次改动都是一个新文件最后你根本分不清哪个是最新版。Markdown是纯文本配合Git或者简单的文件命名规范版本一目了然改了什么、谁改的、什么时候改的全都可追溯。第三个痛点是多端适配。学生可能在手机上看教练可能在电脑上投影家长可能想打印出来。Markdown源文件只有一份通过不同的渲染工具和样式表可以输出成适合手机阅读的HTML、适合打印的PDF、适合编辑的Word。这种一次编写、多处输出的能力是传统格式很难做到的。2.2 Markdown在试题场景下的具体优势具体到CSP-J初赛试题Markdown的优势可以落到几个很实在的点上。表格方面初赛里有不少题目涉及真值表、进制转换对照、算法复杂度对比Markdown的表格语法虽然简单但足够清晰而且转成Excel或CSV非常方便——关键词里有人搜markdown表格转换excel说明这个需求很普遍。代码块方面CSP-J初赛会考程序阅读题里面经常出现C或伪代码片段。Markdown的代码块支持语法高亮学生看起来比纯文本舒服得多而且复制出来直接能编译运行。数学符号方面虽然Markdown原生不支持复杂公式但配合LaTeX语法很多编辑器都支持像$2^{10}$、$O(n\log n)$、$\binom{n}{k}$这种表达式可以写得很规范。关键词里markdown 数学符号也是高频搜索说明大家确实有这个需求。结构清晰方面Markdown的标题层级、列表、引用块天然适合组织题目—选项—答案—解析这种嵌套结构。你不需要手动调格式只要把层级写对渲染出来自然就整齐。2.3 我最终选定的工具链工具选型这块我试过不少组合最后稳定下来的方案是VS Code Markdown All in One插件 Markdown Preview Enhanced。VS Code负责编辑和版本管理Markdown All in One提供快捷键和目录生成Markdown Preview Enhanced负责预览和导出PDF/HTML。如果你习惯Typora也完全没问题Typora的所见即所得体验更顺滑但导出复杂表格时偶尔会有样式问题需要手动调一下。对于公式我用的是KaTeX渲染比MathJax快而且在VS Code的预览里支持得很好。如果你要把Markdown转成WordPandoc是绕不开的工具配合reference.docx模板可以控制输出样式。关键词里有人搜dify markdown转word中序号自动编号和markdown转word工作流coze说明自动化转换是个真实需求后面我会专门讲这块。提示如果你只是想把试题发给学生看不需要折腾太复杂的工具链。一个能预览Markdown的编辑器加一个能导出PDF的功能就足够覆盖90%的场景了。3. CSP-J2026第一轮试题的Markdown结构设计3.1 整体文件组织方式一份完整的初赛试题资料我把它拆成三个文件problems.md放题目answers.md放答案和解析README.md放使用说明和目录。这样拆的好处是学生可以先自己做题做完再对照答案不会一打开就看到答案。如果你想把它们合并成一个文件用Markdown的引用块或者折叠语法也能实现但分开维护更灵活。文件内部的层级我这样设计一级用##表示大题比如一、单项选择题二级用###表示具体题目比如第1题题目正文用普通段落选项用无序列表答案和解析用引用块或者单独的####小节。这种层级在大多数Markdown渲染器里都能正确显示不会出现层级混乱。## 一、单项选择题共15题每题2分共30分 ### 第1题 在C中以下哪个关键字用于定义常量 - A. const - B. static - C. final - D. define **答案A** **解析** const是C中定义常量的关键字……3.2 题目编号与交叉引用试题资料里经常需要交叉引用比如见第3题参考第7题解析。Markdown原生不支持自动编号和交叉引用但可以通过手动编号加锚点链接来实现。我的做法是给每道题一个稳定的ID比如#q1、#q2然后在需要引用的地方写[第1题](#q1)。这样即使题目顺序调整只要ID不变链接就不会失效。编号格式我建议用题号简短描述的方式比如### 第1题常量定义而不是只写### 第1题。这样在生成目录时读者一眼就能看到每道题考什么检索起来方便很多。关键词里有人搜csp-j初赛知识点博客其实这种带描述的题目结构本身就是一种知识点索引。3.3 选项和答案的排版细节选项排版有个小坑如果选项内容比较长用无序列表会导致换行后缩进不一致。我的处理方式是短选项用无序列表长选项用普通段落加粗选项字母。比如A. 这是一个很长的选项长到需要换行才能显示完整这种情况下用列表反而不美观。 B. 另一个同样很长的选项。答案和解析我统一放在引用块里用加粗标注答案和解析。这样做的好处是在渲染出来的页面里答案区域会有明显的视觉区分学生不会不小心看到。如果你用的是支持折叠的渲染器比如某些VS Code插件还可以把答案解析做成可折叠区域体验更好。3.4 表格类题目的处理CSP-J初赛里表格题不少比如真值表、进制对照表、算法复杂度对比。Markdown表格的语法要求表头和数据行用|分隔对齐方式用:控制。我一般把表格放在题目正文里保持左对齐因为试题表格通常不需要花哨的样式。运算符优先级结合性()1左到右!2右到左*3左到右表格转Excel的需求很常见我通常会在表格下面附一句可将此表格复制到Excel中因为Markdown表格复制到Excel时大多数情况下能自动识别分隔符。如果不行用Pandoc转一次CSV也很方便。4. 逐题解析的写作颗粒度与知识点覆盖4.1 解析写到什么程度才算合格我见过很多试题解析只写一个答案字母最多加一句因为A正确。这种解析对学生几乎没有帮助。我的标准是每道题的解析必须回答三个问题——考什么知识点、为什么这个选项对、其他选项为什么错。对于程序阅读题还要加上这段代码的执行流程和容易看错的地方。举个例子一道关于二进制转十进制的题解析不能只写答案是B而要写清楚这道题考的是按权展开求和具体计算过程是$1\times2^30\times2^21\times2^11\times2^011$选项A是把它当成了八进制选项C漏掉了最高位选项D是计算时把权值搞反了。这样学生不仅知道答案还知道自己可能错在哪。4.2 知识点标签的嵌入方式为了方便学生按知识点复习我在每道题解析的最后加一行知识点标签格式是 知识点二进制转换、按权展开。这些标签可以手动维护也可以用脚本从解析文本里提取。积累多了之后你可以生成一个知识点索引把同一知识点的题目聚合在一起复习效率会高很多。关键词里csp-j初赛知识点和csp-j知识点都是高频搜索说明大家确实需要这种按知识点组织的内容。我的建议是标签不要太多太细控制在每道题2到4个否则索引会变得很碎。4.3 程序阅读题的解析模板程序阅读题是初赛的重头戏也是解析最难写的部分。我总结了一个模板先贴代码然后逐步跟踪变量变化用表格展示关键步骤最后总结算法思想。比如一道循环累加的题int sum 0; for (int i 1; i 5; i) { sum i * i; }解析里我会列一个表循环轮次i的值i*isum累加后1111224533914441630552555这样学生一眼就能看到执行过程比纯文字描述清楚得多。表格后面再补一句这道题本质上是求$1^22^2\cdots5^2$可以用公式$\frac{n(n1)(2n1)}{6}$验证。4.4 易错点的标注方法每道题我都会标注易错点用加粗或者引用块突出。比如注意这里i和i在循环里的效果相同但在赋值表达式里不同。这些易错点往往是从实际教学里总结出来的学生错得最多的地方。关键词里csp-j 2023 小苹果这种具体题目搜索说明学生确实会针对某道题反复查资料解析里把易错点写清楚能省掉很多重复提问。5. Markdown源码的维护与格式转换实战5.1 源码目录结构与命名规范我的源码目录长这样csp-j-2026-round1/ ├── README.md ├── problems.md ├── answers.md ├── assets/ │ ├── images/ │ └── styles/ └── scripts/ ├── to-word.sh └── to-pdf.shassets放图片和样式文件scripts放转换脚本。命名规范上我坚持用英文小写加连字符避免中文文件名在不同系统下出现编码问题。图片路径用相对路径比如assets/images/q1-diagram.png这样整个目录拷贝到任何地方都能正常显示。关键词里有人搜markdown图片路径和onenotemdexporter导出markdown图片路径不对说明路径问题是常见坑相对路径加统一目录结构是最稳妥的方案。5.2 转Word的完整流程把Markdown转成WordPandoc是首选。基本命令是pandoc problems.md -o problems.docx --reference-docassets/styles/reference.docxreference.docx是一个模板文件你可以在里面预设好标题样式、正文字体、页边距。生成一次模板后后续所有转换都会沿用这个样式。如果遇到序号自动编号的问题比如列表编号在Word里变成手动编号可以在Pandoc命令里加--number-sections或者在模板里配置好列表样式。关键词里dify markdown转word中序号自动编号和markdown转word工作流coze反映的是自动化需求。如果你想把转换流程自动化可以写一个简单的shell脚本监听文件变化后自动执行Pandoc。更复杂的场景可以用CI工具每次提交后自动生成Word和PDF。5.3 转PDF和HTML的注意事项转PDF我推荐用Markdown Preview Enhanced的导出功能或者用Pandoc配合LaTeX引擎。Pandoc转PDF的命令是pandoc problems.md -o problems.pdf --pdf-enginexelatex -V mainfontNoto Sans CJK SC中文字体一定要指定否则会变成方块。Noto Sans CJK SC是个稳妥的选择大多数系统都能装。转HTML更简单Pandoc直接输出或者用VS Code的预览功能另存为HTML。HTML的好处是可以嵌入交互元素比如点击显示答案这个用一点JavaScript就能实现。5.4 版本管理与协作建议如果多人协作整理试题Git是必须的。我的做法是主分支放稳定版每个整理者开自己的分支改完后提Pull Request。提交信息写清楚改了什么比如修正第7题答案补充解析。这样即使过了半年你也能查到某道题的修改历史。对于不熟悉Git的教练可以用简单的文件命名规范比如problems-v1.0.md、problems-v1.1.md每次修改递增版本号。虽然不如Git强大但至少不会出现最终版最终版2真正最终版这种混乱。6. 从试题整理延伸到知识点博客的构建6.1 试题资料如何转化为知识点文章整理完试题后我发现这些解析本身就是很好的知识点素材。把同一知识点的题目解析聚合起来稍加整理就是一篇知识点博客。比如把所有关于进制转换的题目解析抽出来加上基础概念讲解和练习题就是一篇完整的进制转换教程。关键词里csp-j初赛知识点博客正是这个思路。我的做法是在answers.md里给每道题打上知识点标签然后用脚本按标签聚合生成knowledge/进制转换.md、knowledge/排序算法.md这样的文件。每个文件里先讲基础概念再列相关题目和解析最后加几道练习题。这样一份试题资料就变成了一个可持续更新的知识库。6.2 用Markdown搭建个人知识库的要点用Markdown搭知识库核心是链接和索引。每篇文章之间用相对链接互相引用比如[进制转换](knowledge/进制转换.md)。再建一个index.md作为总目录列出所有知识点和题目。这样整个知识库就是一个网状结构而不是一堆孤立文件。另一个要点是标签系统。我在每篇文章的front matter里加标签比如--- tags: [进制转换, 二进制, 十六进制] ---然后用脚本扫描所有文件的标签生成标签云或者标签索引页。这样学生可以按标签找内容比翻目录快得多。6.3 长期维护的实用建议试题和知识点资料是需要长期维护的。我的建议是每年更新一次把新题加进去把过时的表述改掉把学生反馈的易错点补充进去。维护的时候优先改解析因为题目本身一般不会变但解析可以越写越清楚。另外保留一份变更日志记录每次修改的内容和原因。比如2026-10-15修正第12题答案原答案C有误应为B原因是……。这样即使过了几年你也能知道某道题为什么是现在这个答案。注意整理试题资料时务必确认题目来源的准确性。不同渠道流传的版本可能有出入最好以官方或权威渠道为准。如果发现版本冲突在解析里注明此题存在版本差异此处采用XX版本。7. 我在整理过程中踩过的坑和总结的技巧7.1 公式渲染的兼容性问题Markdown的公式渲染在不同工具里差异很大。VS Code的Markdown Preview Enhanced默认用KaTeXTypora用MathJaxGitHub的渲染又不一样。我遇到过同一个公式在本地预览正常推到GitHub上就显示成乱码的情况。解决办法是尽量用最基础的LaTeX语法避免冷门命令并且在多个平台测试。如果公式特别复杂干脆用图片代替虽然不够优雅但兼容性最好。7.2 表格转Excel的格式丢失Markdown表格复制到Excel时有时候会因为单元格里有|字符导致列错位。我的处理方式是在表格里避免使用|如果必须用就用\|转义。另外表格不要有合并单元格Markdown原生不支持转Excel时也会出问题。如果确实需要复杂表格建议直接用Excel做好后截图插入或者用HTML表格代替。7.3 中英文混排的间距问题中英文混排时标点符号和空格的处理很影响阅读体验。我的习惯是中文和英文之间加一个空格比如使用 Markdown 格式但中文标点后面不加空格。这个规则在大多数编辑器里可以配置自动格式化但Markdown本身不管这些需要手动注意。如果团队协作最好在README里写清楚排版规范避免每个人风格不一致。7.4 源码备份与分发最后说个实在的源码一定要备份。我见过太多人辛辛苦苦整理的资料因为硬盘坏了或者误删就没了。我的做法是本地一份、云盘一份、Git仓库一份三处备份。分发的时候如果只是给学生看导出PDF就够了如果要给其他教练二次加工就把Markdown源码打包发过去。关键词里markdown下载和markdown文件怎么打开说明很多人对Markdown还不熟悉分发时可以附一个简短的使用说明告诉对方用什么工具打开。这套整理CSP-J2026第一轮试题的方法我从几年前就开始用每年迭代一点现在基本形成了一套稳定的流程。如果你也在整理类似的考试资料不妨从Markdown开始前期多花一点时间搭好结构后期维护会轻松很多。