feat: print includes answer only after unlocking solutions
- If solutions already unlocked (full mode), print button shows '打印题目+答案' - If not unlocked, print button shows '打印题目' (problem only) - No longer forces unlock when printing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
这个提交包含在:
@@ -754,125 +754,170 @@ void SeedDemoData(SqliteDb& db) {
|
||||
const char* tags[6];
|
||||
};
|
||||
const CourseItem items[] = {
|
||||
{
|
||||
"cpp-basic-01-hello",
|
||||
"C++基础01:环境配置与Hello World(VSCode)",
|
||||
1,
|
||||
"course:cpp-basic:01",
|
||||
R"MD(# C++基础01:环境配置与Hello World(VSCode)
|
||||
{
|
||||
"cpp-basic-01-hello",
|
||||
"C++基础01:环境配置与Hello World(VSCode)",
|
||||
1,
|
||||
"course:cpp-basic:01",
|
||||
"# C++基础01:环境配置与Hello World(VSCode)\n\n## 学习目标\n- 安装并打开 VSCode,创建并运行第一个 C++14 程序\n- 学会新建文件、保存、运行、查看输出\n- 了解 `main()`、`#include <iostream>`、`cout`\n\n## 推荐视频(观看后写笔记)\n- 保姆级:VSCode + mingw64 配置 C/C++(BV1tg411N7Fq)\n - https://www.bilibili.com/video/BV1tg411N7Fq/\n- 每天五分钟学C++:01 开发工具(BV1dK4y137bk,系列入口)\n - https://www.bilibili.com/video/BV1dK4y137bk/\n\n## 参考图文\n- LoongBa 极简配置:GCC/VSCode/HelloWorld\n - https://github.com/LoongBa/Cpp_Beginner_Guide\n\n## 练习(完成至少 2 题)\n- B2002 Hello, World! https://www.luogu.com.cn/problem/B2002\n- P1000 超级玛丽游戏 https://www.luogu.com.cn/problem/P1000\n\n## 提交要求\n- 在本题页面下方“学习笔记”区域写下:\n 1) 你安装了什么、遇到什么坑、怎么解决\n 2) 你的 HelloWorld 代码\n 3) 你学到的 3 个关键词\n",
|
||||
{"cpp-basic","vscode","io","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-02-io",
|
||||
"C++基础02:输入输出与变量",
|
||||
1,
|
||||
"course:cpp-basic:02",
|
||||
"# C++基础02:输入输出与变量\n\n## 学习目标\n- 会用 `cin` 读入、`cout` 输出\n- 理解变量:`int / long long / double / char / string`\n\n## 推荐视频\n- 每天五分钟学C++:02 输出、03 变量(系列入口见上)\n - https://www.bilibili.com/video/BV1dK4y137bk/\n\n## 练习\n- P1001 A+B Problem https://www.luogu.com.cn/problem/P1001\n- B2008 计算 (a+b)×c 的值 https://www.luogu.com.cn/problem/B2008\n- P5704 字母转换 https://www.luogu.com.cn/problem/P5704\n\n## 提交要求\n- 上传/填写学习笔记:写出 `cin/cout` 模板、常见错误(空格/换行)\n",
|
||||
{"cpp-basic","io","types","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-03-branch",
|
||||
"C++基础03:分支结构(if / switch)",
|
||||
2,
|
||||
"course:cpp-basic:03",
|
||||
"# C++基础03:分支结构(if / switch)\n\n## 学习目标\n- 会写 `if / else if / else` 与基本逻辑运算\n- 能处理边界与分类讨论\n\n## 练习\n- B2035 判断数正负 https://www.luogu.com.cn/problem/B2035\n- P5711 闰年判断 https://www.luogu.com.cn/problem/P5711\n- P1909 买铅笔 https://www.luogu.com.cn/problem/P1909\n\n## 提交要求\n- 笔记里写清:你如何找“边界”(例如 0、最小/最大、等于条件)\n",
|
||||
{"cpp-basic","branch","logic","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-04-loop",
|
||||
"C++基础04:循环结构(for / while)",
|
||||
2,
|
||||
"course:cpp-basic:04",
|
||||
"# C++基础04:循环结构(for / while)\n\n## 学习目标\n- 会用循环做:计数、累加、打印图形\n\n## 练习\n- B2083 画矩形 https://www.luogu.com.cn/problem/B2083\n- P1421 小玉买文具 https://www.luogu.com.cn/problem/P1421\n\n## 提交要求\n- 笔记里写:循环三要素(初始化/条件/更新)+ 你调试的方法\n",
|
||||
{"cpp-basic","loop","debug","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-05-array",
|
||||
"C++基础05:数组入门(一维)",
|
||||
3,
|
||||
"course:cpp-basic:05",
|
||||
"# C++基础05:数组入门(一维)\n\n## 学习目标\n- 会定义数组、遍历、统计\n\n## 练习\n- P1427 小鱼的数字游戏 https://www.luogu.com.cn/problem/P1427\n- P1428 小鱼比可爱 https://www.luogu.com.cn/problem/P1428\n\n## 提交要求\n- 笔记里写:数组下标从 0/1 的选择;如何避免越界\n",
|
||||
{"cpp-basic","array","", "", "", ""}
|
||||
},
|
||||
|
||||
## 学习目标
|
||||
- 安装并打开 VSCode,创建并运行第一个 C++14 程序
|
||||
- 学会新建文件、保存、运行、查看输出
|
||||
- 了解 `main()`、`#include <iostream>`、`cout`
|
||||
// 06~20:新增课程
|
||||
{
|
||||
"cpp-basic-06-char-string",
|
||||
"C++基础06:字符与字符串(char / string)",
|
||||
3,
|
||||
"course:cpp-basic:06",
|
||||
"# C++基础06:字符与字符串(char / string)\n\n## 学习目标\n- 区分 `char`(一个字符)与 `string`(一串字符)\n- 会做:大小写转换、统计字母、简单加密\n\n## 重点\n- `char c='A'`,`string s=\"abc\"`\n- `s.size()` / `s[i]` / 遍历字符串\n\n## 练习(完成至少 2 题)\n- P5704 字母转换 https://www.luogu.com.cn/problem/P5704\n- P5733 自动修正 https://www.luogu.com.cn/problem/P5733\n- P1914 小书童——凯撒密码 https://www.luogu.com.cn/problem/P1914\n\n## 提交要求\n- 笔记写:`string` 下标访问与越界风险(最后一个下标是 size()-1)\n",
|
||||
{"cpp-basic","string","char","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-07-operator-cast",
|
||||
"C++基础07:运算、取整与类型转换(/ %)",
|
||||
3,
|
||||
"course:cpp-basic:07",
|
||||
"# C++基础07:运算、取整与类型转换(/ %)\n\n## 学习目标\n- 写对 `+ - * / %`\n- 理解:整数除法会向下取整;`%` 只能用于整数\n- 学会用 `long long` 防止溢出\n\n## 练习\n- B2008 计算 (a+b)×c 的值 https://www.luogu.com.cn/problem/B2008\n- P1421 小玉买文具 https://www.luogu.com.cn/problem/P1421\n- P5708 三角形面积 https://www.luogu.com.cn/problem/P5708\n\n## 提交要求\n- 笔记写:什么时候要用 `long long`(例如钱、人数、乘法很大)\n",
|
||||
{"cpp-basic","math","cast","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-08-logic",
|
||||
"C++基础08:逻辑运算与边界(&& || !)",
|
||||
3,
|
||||
"course:cpp-basic:08",
|
||||
"# C++基础08:逻辑运算与边界(&& || !)\n\n## 学习目标\n- 能把题目里的“并且/或者/不是”写成条件\n- 学会找边界:等于、最小/最大、0\n\n## 练习\n- P5710 数的性质 https://www.luogu.com.cn/problem/P5710\n- P5711 闰年判断 https://www.luogu.com.cn/problem/P5711\n- P1909 买铅笔 https://www.luogu.com.cn/problem/P1909\n\n## 提交要求\n- 笔记写:你列出的边界测试用例(至少 3 个)\n",
|
||||
{"cpp-basic","logic","boundary","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-09-switch",
|
||||
"C++基础09:switch 与枚举列情况",
|
||||
3,
|
||||
"course:cpp-basic:09",
|
||||
"# C++基础09:switch 与枚举列情况\n\n## 学习目标\n- 会写 `switch/case/break`\n- 面对“情况很少”的题,会列举所有情况\n\n## 练习\n- P2433 小学数学N合一 https://www.luogu.com.cn/problem/P2433\n\n## 提交要求\n- 笔记写:为什么每个 case 后要 `break`(避免贯穿执行)\n",
|
||||
{"cpp-basic","switch","enum","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-10-for",
|
||||
"C++基础10:for循环(计数与累加)",
|
||||
3,
|
||||
"course:cpp-basic:10",
|
||||
"# C++基础10:for循环(计数与累加)\n\n## 学习目标\n- 熟练掌握 `for(初始化; 条件; 更新)`\n- 会写:求和、求最大最小、统计个数\n\n## 练习\n- P1425 小鱼的游泳时间 https://www.luogu.com.cn/problem/P1425\n- P5718 找最小值 https://www.luogu.com.cn/problem/P5718\n\n## 提交要求\n- 笔记写:循环“三要素”分别是什么\n",
|
||||
{"cpp-basic","loop","for","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-11-while",
|
||||
"C++基础11:while循环(未知次数)",
|
||||
3,
|
||||
"course:cpp-basic:11",
|
||||
"# C++基础11:while循环(未知次数)\n\n## 学习目标\n- 会用 `while` 处理:读到结束、读到 0 停止\n- 避免死循环:每次循环必须改变状态\n\n## 练习\n- P1427 小鱼的数字游戏 https://www.luogu.com.cn/problem/P1427\n- P1047 校门外的树(选做)https://www.luogu.com.cn/problem/P1047\n\n## 提交要求\n- 笔记写:你是如何避免死循环的(更新变量写在哪里)\n",
|
||||
{"cpp-basic","loop","while","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-12-nested",
|
||||
"C++基础12:嵌套循环与打印图形",
|
||||
3,
|
||||
"course:cpp-basic:12",
|
||||
"# C++基础12:嵌套循环与打印图形\n\n## 学习目标\n- 外层循环=行,内层循环=列\n- 能打印:矩形、三角形、乘法表\n\n## 练习\n- B2083 画矩形 https://www.luogu.com.cn/problem/B2083\n- P5717 三角形分类(练分类讨论 + 输出格式)https://www.luogu.com.cn/problem/P5717\n\n## 提交要求\n- 笔记写:你画图时是怎么想“行/列”的\n",
|
||||
{"cpp-basic","nested-loop","print","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-13-array-ops",
|
||||
"C++基础13:数组进阶(统计/查找/反转)",
|
||||
4,
|
||||
"course:cpp-basic:13",
|
||||
"# C++基础13:数组进阶(统计/查找/反转)\n\n## 学习目标\n- 用数组做:统计、查找位置、反转、去重(了解)\n\n## 练习\n- P1428 小鱼比可爱 https://www.luogu.com.cn/problem/P1428\n- P5727 冰雹猜想 https://www.luogu.com.cn/problem/P5727\n\n## 提交要求\n- 笔记写:数组越界的 2 个典型原因 + 你的检查方法\n",
|
||||
{"cpp-basic","array","practice","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-14-function",
|
||||
"C++基础14:函数入门(把重复代码变成工具)",
|
||||
4,
|
||||
"course:cpp-basic:14",
|
||||
"# C++基础14:函数入门(参数/返回值/作用域)\n\n## 学习目标\n- 会定义并调用函数\n- 知道局部变量作用域({} 内有效)\n\n## 练习\n- P5735 距离函数 https://www.luogu.com.cn/problem/P5735\n- P5739 计算阶乘(也可用递归)https://www.luogu.com.cn/problem/P5739\n\n## 提交要求\n- 笔记写:你把哪段重复代码抽成了函数?为什么这样更清晰?\n",
|
||||
{"cpp-basic","function","scope","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-15-recursion",
|
||||
"C++基础15:递归入门(选学)",
|
||||
4,
|
||||
"course:cpp-basic:15",
|
||||
"# C++基础15:递归入门(选学)\n\n## 学习目标\n- 理解递归:函数调用自己\n- 必须有终止条件(否则会无限调用)\n\n## 练习\n- P5739 计算阶乘 https://www.luogu.com.cn/problem/P5739\n- P1028 数的计算(选做)https://www.luogu.com.cn/problem/P1028\n\n## 提交要求\n- 笔记写:你的递归“终止条件”是什么?\n",
|
||||
{"cpp-basic","recursion","", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-16-struct",
|
||||
"C++基础16:结构体 struct(选学)",
|
||||
4,
|
||||
"course:cpp-basic:16",
|
||||
"# C++基础16:结构体 struct(选学)\n\n## 学习目标\n- 用 `struct` 把多个字段打包成一个“人物卡/记录”\n- 学会 `struct` 数组\n\n## 练习\n- P5740 最厉害的学生 https://www.luogu.com.cn/problem/P5740\n- P5744 培训 https://www.luogu.com.cn/problem/P5744\n\n## 提交要求\n- 笔记写:struct 适合用在什么场景(多个属性属于同一个对象)\n",
|
||||
{"cpp-basic","struct","", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-17-sort",
|
||||
"C++基础17:排序初步(sort)",
|
||||
4,
|
||||
"course:cpp-basic:17",
|
||||
"# C++基础17:排序初步(sort)\n\n## 学习目标\n- 会用 `#include <algorithm>` 和 `sort`\n- 排序后做统计/查找会更简单\n\n## 练习\n- P1059 明明的随机数 https://www.luogu.com.cn/problem/P1059\n- P1093 奖学金(选做)https://www.luogu.com.cn/problem/P1093\n\n## 提交要求\n- 笔记写:sort 的区间是 `[begin, end)`(end 不包含)\n",
|
||||
{"cpp-basic","sort","algorithm","", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-18-binary-search",
|
||||
"C++基础18:二分查找初步(lower_bound)",
|
||||
4,
|
||||
"course:cpp-basic:18",
|
||||
"# C++基础18:二分查找初步(lower_bound)\n\n## 学习目标\n- 理解“在有序数组里快速找答案”\n- 会用 `lower_bound` 找第一个 >= x 的位置\n\n## 练习\n- P2249 查找 https://www.luogu.com.cn/problem/P2249\n\n## 提交要求\n- 笔记写:二分查找的前提:数组必须有序\n",
|
||||
{"cpp-basic","binary-search","", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-19-prefix-sum",
|
||||
"C++基础19:前缀和(区间求和神器)",
|
||||
4,
|
||||
"course:cpp-basic:19",
|
||||
"# C++基础19:前缀和(区间求和神器)\n\n## 学习目标\n- 会构造前缀和 `s[i]=s[i-1]+a[i]`\n- 会算区间和 `sum(l,r)=s[r]-s[l-1]`\n\n## 练习\n- P8218 求区间和(前缀和基础)https://www.luogu.com.cn/problem/P8218\n\n## 提交要求\n- 笔记写:下标偏移是怎么处理的(从 1 开始更方便)\n",
|
||||
{"cpp-basic","prefix-sum","", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-20-simulation",
|
||||
"C++基础20:模拟题与综合复盘",
|
||||
4,
|
||||
"course:cpp-basic:20",
|
||||
"# C++基础20:模拟题与综合复盘\n\n## 学习目标\n- 学会按题意一步步做(模拟)\n- 复盘:总结常见错误 + 常用模板\n\n## 练习(从这里选 3~5 题做小测)\n- P1957 口算练习题 https://www.luogu.com.cn/problem/P1957\n- P1055 ISBN号码 https://www.luogu.com.cn/problem/P1055\n- P2433 小学数学N合一(回顾)https://www.luogu.com.cn/problem/P2433\n\n## 提交要求\n- 笔记写:\n 1) 你最常犯的 3 类错误\n 2) 你最常用的 5 行代码模板\n 3) 下周你准备怎么练\n",
|
||||
{"cpp-basic","simulation","review","", "", ""}
|
||||
},
|
||||
};
|
||||
|
||||
## 推荐视频(观看后写笔记)
|
||||
- 保姆级:VSCode + mingw64 配置 C/C++(BV1tg411N7Fq)
|
||||
- https://www.bilibili.com/video/BV1tg411N7Fq/
|
||||
- 每天五分钟学C++:01 开发工具(BV1dK4y137bk,系列入口)
|
||||
- https://www.bilibili.com/video/BV1dK4y137bk/
|
||||
|
||||
## 参考图文
|
||||
- LoongBa 极简配置:GCC/VSCode/HelloWorld
|
||||
- https://github.com/LoongBa/Cpp_Beginner_Guide
|
||||
|
||||
## 练习(完成至少 2 题)
|
||||
- B2002 Hello, World! https://www.luogu.com.cn/problem/B2002
|
||||
- P1000 超级玛丽游戏 https://www.luogu.com.cn/problem/P1000
|
||||
|
||||
## 提交要求
|
||||
- 在本题页面下方“学习笔记”区域写下:
|
||||
1) 你安装了什么、遇到什么坑、怎么解决
|
||||
2) 你的 HelloWorld 代码
|
||||
3) 你学到的 3 个关键词
|
||||
)MD",
|
||||
{"cpp-basic", "vscode", "io", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-02-io",
|
||||
"C++基础02:输入输出与变量",
|
||||
1,
|
||||
"course:cpp-basic:02",
|
||||
R"MD(# C++基础02:输入输出与变量
|
||||
|
||||
## 学习目标
|
||||
- 会用 `cin` 读入、`cout` 输出
|
||||
- 理解变量:`int / long long / double / char / string`
|
||||
|
||||
## 推荐视频
|
||||
- 每天五分钟学C++:02 输出、03 变量(系列入口见上)
|
||||
- https://www.bilibili.com/video/BV1dK4y137bk/
|
||||
|
||||
## 练习
|
||||
- P1001 A+B Problem https://www.luogu.com.cn/problem/P1001
|
||||
- B2008 计算 (a+b)×c 的值 https://www.luogu.com.cn/problem/B2008
|
||||
- P5704 字母转换 https://www.luogu.com.cn/problem/P5704
|
||||
|
||||
## 提交要求
|
||||
- 上传/填写学习笔记:写出 `cin/cout` 模板、常见错误(空格/换行)
|
||||
)MD",
|
||||
{"cpp-basic", "io", "types", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-03-branch",
|
||||
"C++基础03:分支结构(if / switch)",
|
||||
2,
|
||||
"course:cpp-basic:03",
|
||||
R"MD(# C++基础03:分支结构(if / switch)
|
||||
|
||||
## 学习目标
|
||||
- 会写 `if / else if / else` 与基本逻辑运算
|
||||
- 能处理边界与分类讨论
|
||||
|
||||
## 练习
|
||||
- B2035 判断数正负 https://www.luogu.com.cn/problem/B2035
|
||||
- P5711 闰年判断 https://www.luogu.com.cn/problem/P5711
|
||||
- P1909 买铅笔 https://www.luogu.com.cn/problem/P1909
|
||||
|
||||
## 提交要求
|
||||
- 笔记里写清:你如何找“边界”(例如 0、最小/最大、等于条件)
|
||||
)MD",
|
||||
{"cpp-basic", "branch", "logic", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-04-loop",
|
||||
"C++基础04:循环结构(for / while)",
|
||||
2,
|
||||
"course:cpp-basic:04",
|
||||
R"MD(# C++基础04:循环结构(for / while)
|
||||
|
||||
## 学习目标
|
||||
- 会用循环做:计数、累加、打印图形
|
||||
|
||||
## 练习
|
||||
- B2083 画矩形 https://www.luogu.com.cn/problem/B2083
|
||||
- P1421 小玉买文具 https://www.luogu.com.cn/problem/P1421
|
||||
|
||||
## 提交要求
|
||||
- 笔记里写:循环三要素(初始化/条件/更新)+ 你调试的方法
|
||||
)MD",
|
||||
{"cpp-basic", "loop", "debug", "", "", ""}
|
||||
},
|
||||
{
|
||||
"cpp-basic-05-array",
|
||||
"C++基础05:数组入门(一维)",
|
||||
3,
|
||||
"course:cpp-basic:05",
|
||||
R"MD(# C++基础05:数组入门(一维)
|
||||
|
||||
## 学习目标
|
||||
- 会定义数组、遍历、统计
|
||||
|
||||
## 练习
|
||||
- P1427 小鱼的数字游戏 https://www.luogu.com.cn/problem/P1427
|
||||
- P1428 小鱼比可爱 https://www.luogu.com.cn/problem/P1428
|
||||
|
||||
## 提交要求
|
||||
- 笔记里写:数组下标从 0/1 的选择;如何避免越界
|
||||
)MD",
|
||||
{"cpp-basic", "array", "", "", "", ""}
|
||||
}
|
||||
};
|
||||
|
||||
for (const auto& it : items) {
|
||||
InsertProblem(raw, it.slug, it.title, it.md, it.diff, it.source, "", "", created);
|
||||
|
||||
在新工单中引用
屏蔽一个用户