C++ 练习题

在浏览器里解题,即时判题。每道题都有隐藏测试、分层提示、完整题解和深度解析 — 通关拿经验、解锁徽章,从第一步到真正的算法思维,按顺序排好。

怎么玩

和本站一切功能一样,判题在本地浏览器完成 — 无账号、不上传、什么都不离开你的设备。草稿自动存在浏览器里。好消息是:死循环会在 3 秒后被自动中断,不会再卡住标签页 —— 写错了只花几秒钟,不用重开页面。

65 道题

入门

题目考察点
两数求和读入输入、打印输出从这里开始
打个招呼第一次读、第一次写
奇数还是偶数一个取模、一个分支
绝对值按符号分岔
交换两个数交换为什么需要临时变量
三个数排序三次比较交换
倒着数for 循环可以往回走
1 到 N 求和你的第一个 for 循环
三个数的最大值if 语句与比较
数一数位数while 循环与整数除法
数字之和拆位模式第三遍
闰年判断&&/|| 与边界条件阅读
乘法表循环 + 精确的输出格式
反转字符串字符串、字符数组
数元音字符检查、cctype
字符串压缩单指针,段会自己结束

进阶

题目考察点
反转数字位数、% 与 / 的配合
回文数认出"这题我已经会了"
阿姆斯特朗数先数位数,再把每位升到那个次方
星号金字塔嵌套循环、输出格式
阶乘累乘、int 溢出天花板
数组最大值数组 vs 流式处理、运行最大值
奇偶统计并行计数器、负数的坑
反转单词顺序读整行、切词、倒着打印
爬楼梯DP 入门:最后一步决定递推式

中级

题目考察点
素数判断循环逻辑、提前退出、√N 捷径
素数计数埃氏筛 — 用内存换速度
最大公约数欧几里得算法,第一个经典算法
最小公倍数复用 gcd —— 以及为什么先除后乘
斐波那契数滑动窗口、递归 vs 迭代
二进制表示位拆分、数组暂存倒序打印
矩阵求和二维数组、嵌套循环
是不是 2 的幂?收缩循环、位技巧
数字出现次数计数数组
数一数 1 的个数位运算、Kernighan 技巧
最少硬币数贪心:先拿装得下的最大面值
括号匹配数组当栈,压入与弹出
枚举子集位掩码:每个子集都是一个二进制数
二维区间求和四个角的容斥
最小路径和第一道二维 DP:每个格子两种过去
日期相差几天闰年规则 + 序列号相减
矩阵乘法三重循环,一个共享下标
螺旋矩阵四条收缩边界,两处复检
约瑟夫环模拟:alive 数组 + 取模走圈

算法思维

题目考察点
第二大的数一趟遍历同时追踪两个值
是否存在两数之和每对只试一次 —— 内层 j 从 i+1 开始
冰雹序列模拟一条没人解得出的规则
数单词带状态标志的字符串扫描
冒泡排序比较与交换,原地重排
二分查找把有序范围对半砍,以及那几个边界
最大子段和一趟遍历,只往前带一个值
回文串同时从两端往中间走
矩阵转置哪个下标才是行?
进制转换取余、收集、倒序
计数排序用内存换掉比较
汉诺塔在函数写完之前就相信它
阶乘末尾零把「算」换成「数」
区间求和前缀和:付一次,查询 O(1)
全排列回溯:选、递归、撤销
区间合并先排序,再带「当前末端」扫一遍
排队打水交换论证证明的贪心
凑硬币贪心会挂的 DP:{1,3,4} 凑 6
括号生成带回溯剪枝的搜索
0/1 背包循环方向决定能否复用
最长上升子序列「以这里结尾」的最长链,O(n²)

开刷之前