
简介这份资源是杭州电子科技大学在线OJ平台第1000至1099号题目的C/C解题代码合集面向正在刷题备赛的编程学习者与算法爱好者可用于对照练习、理解题意与借鉴实现思路。压缩包共90个文件以62个cpp与16个c源码为主体另含少量VC6工程与调试产物如dsp、dsw、pdb、obj等整体约1.1MB按题号命名便于检索定位。目前已有1839人学习下载说明该题号段在杭电OJ练习中具有较高参考价值。内容覆盖基础输入输出、排序查找、动态规划、图论、数论与几何等常见题型代码均经调试通过读者可从中学习C/C语法运用、算法选型与时间空间复杂度优化技巧并借助他人解法拓宽思路、排查自身代码问题适合初学到进阶阶段系统刷题使用。1. 从 1000 题开始杭电 OJ 前一百题到底在考什么很多人第一次打开杭电 OJ 的题目列表看到 1000 到 1099 这一百道题第一反应是「不就是入门题吗刷完就完事了」。真上手才发现这一百题里藏着从 AB 到字符串处理、从循环嵌套到简单数论的完整梯度翻车的人不在少数。这场「考试」考的不是你会不会写代码而是你能不能在有限时间内把题意翻译成正确的输入输出逻辑并且一次通过。拿分的关键只有三条读题准、边界清、格式对。这份 1000-1099 的代码资源适合正在准备机试、课程上机、或者想系统过一遍基础题型的人把它当成一份可对照的答案册来练比盲目提交有效得多。杭电 OJ 的判题是严格的黑盒比对输出多一个空格、少一个换行都会判错。前一百题看似简单实际上是在训练你对「输入格式」和「输出格式」的敏感度。很多人刷了几十题还是 WA问题往往不在算法而在没搞清楚这题是单组输入还是多组输入、是读到 EOF 还是读到 0 结束。这一百题的价值就在于此它把基础语法、循环控制、数组、字符串、简单数学这几块拆成一道道小题让你在低难度下把格式习惯养好。后面再遇到复杂题格式这关就不会再拖后腿。2. 高频考点拆解输入输出格式与循环控制2.1 多组输入的三种写法与判断方法杭电 OJ 前一百题里多组输入是出现频率最高的考点没有之一。1000、1001、1089、1090、1091、1092、1093、1094 这一串题号几乎都在考同一件事怎么正确处理多组数据。常见的有三种形式必须分清楚。第一种是读到文件结束也就是 EOF。C 语言里用while(scanf(%d%d,a,b)!EOF)C 里用while(cinab)。这种写法不需要知道有多少组判题机给多少组就处理多少组。第二种是先给组数 T然后循环 T 次。典型写法是先读 T再while(T--)或for循环。这种题如果漏读 T后面全错。第三种是读到特定值结束比如读到 0 0 停止。这种题最容易错在「终止条件那一组不处理」很多人把判断写在处理之后导致最后一组被多算一次。// 多组输入读到 EOF 为止每组求 AB #include stdio.h int main() { int a, b; // scanf 返回成功读入的变量个数等于 EOF 说明没有更多输入 while (scanf(%d%d, a, b) ! EOF) { printf(%d\n, a b); } return 0; }这段代码的关键在! EOF这个判断。scanf在读到输入末尾时会返回EOF只要还有数据就返回成功读入的个数。参数上没有什么可调的但要注意a和b的类型要和题目要求一致题目说整数就用int说大数就考虑long long。失败时先看是不是把EOF写成了0这是最常见的翻车点。提示多组输入的题先在草稿上写清楚「这题怎么结束」再动手写循环比写完再调试省时间。2.2 循环嵌套与图形输出的套路1000-1099 里有一批题专门练循环嵌套比如打印三角形、菱形、矩形图案。这类题看着花哨其实套路固定外层控制行数内层控制每行的空格数和字符数。以打印一个 n 行的直角三角形为例第 i 行有 i 个字符前面可能有 n-i 个空格。把这两个数量关系写对图案就出来了。// 打印 n 行直角三角形第 i 行有 i 个星号 #include stdio.h int main() { int n, i, j; scanf(%d, n); for (i 1; i n; i) { // 外层控制行数 for (j 1; j i; j) { // 内层控制每行星号个数 printf(*); } printf(\n); // 每行结束必须换行 } return 0; }外层循环变量i从 1 到 n内层j从 1 到 i这样第 i 行正好打印 i 个星号。参数上唯一要改的是星号前面的空格数如果题目要求居中对齐就在内层前面再加一个打印空格的循环空格数是n - i。这类题失分基本都在「每行末尾多打了一个空格」或者「最后一行后面多了一个空行」判题机不认。2.3 真题演练1000 与 1090 的答题思路拿 1000 题来说题目就是求两个整数的和输入多组输出每组结果。面试官或者判题机最想看到的是你有没有处理「多组」这件事。答题思路分三步先确认输入是读到 EOF再写累加最后每组输出后换行。很多人第一次提交 WA就是因为只读了一组。1090 题稍微绕一点先给一个整数 n 表示组数然后每组两个数求和。这题的坑在于 n 后面可能跟换行读的时候用scanf或cin都能自动跳过空白不用特殊处理。答题模板是读 n循环 n 次每次读两个数输出和。易错点是循环变量用while(n--)时如果后面还要用 n 的原值就会出错所以要么另存一个变量要么用for循环。这类题通常这么答先说清楚输入形式再说输出形式最后点出边界条件。面试官最想听的不是你背代码而是你能不能说清「这题为什么这么读」。3. 字符串与数组容易被忽视的失分重灾区3.1 字符串读入的三种方式与换行陷阱1000-1099 里字符串题不算多但每一道都是失分高发区。核心问题在于scanf(%s)遇到空格就停gets能读整行但很多环境已经不支持fgets安全但会把换行符也读进来。三种方式各有适用场景选错了就是 WA。读入方式是否读空格是否读换行适用场景scanf(%s)否否单个单词、无空格字符串gets是是丢弃整行读取但已不推荐fgets是是保留整行读取需手动去换行用fgets的时候读进来的字符串末尾会带一个\n如果直接拿去做比较或输出就会多一个换行。处理办法是读完以后判断最后一位是不是\n是就把它改成\0。这个细节不处理字符串长度就会多 1后续所有逻辑都可能偏。// 用 fgets 读整行并去掉末尾换行符 #include stdio.h #include string.h int main() { char s[100]; fgets(s, sizeof(s), stdin); // 最多读 sizeof(s)-1 个字符 int len strlen(s); if (len 0 s[len-1] \n) { // 末尾是换行就替换成结束符 s[len-1] \0; } printf(%s\n, s); return 0; }fgets的第二个参数是缓冲区大小传sizeof(s)最稳妥。第三个参数stdin表示从标准输入读。去掉换行的判断必须加len 0否则空字符串会越界。这类题失败时先打印字符串长度看看多 1 基本就是换行没去干净。3.2 数组越界与初始化问题数组题在这一百题里主要考两点下标从 0 还是从 1 开始以及数组有没有初始化。C 语言里局部数组不初始化就是随机值如果题目要求累加或者统计没初始化直接算就是错的。另一个高频错误是循环条件写成i n而数组只开了 n 个空间越界写坏内存结果时对时错非常玄学。答题时的习惯应该是先看题目数据范围数组开比范围大一点循环下标从 0 开始就用 n从 1 开始就开n1的空间。初始化用memset或者直接 {0}。这些动作不费时间但能挡掉一大半莫名其妙的 WA。3.3 真题演练字符串反转与字符统计假设有一道题要求把输入的字符串反转输出。答题思路是读整行去掉换行从末尾往前遍历输出。易错点在于如果字符串里有空格用scanf(%s)只能读到第一个空格前必须用fgets。另一道常见题是统计一行里某个字符出现的次数思路是遍历每个字符做比较计数器初始化为 0。这类题面试官想看的是你对「读入方式决定后续逻辑」有没有意识而不是能不能写出反转。4. 简单数学与模拟看起来会做却总 WA 的题4.1 整数运算的边界与溢出1000-1099 里的数学题难度不高但溢出是常客。两个int相加如果接近上限就会变成负数题目数据范围稍微大一点就翻车。判断方法很简单看题目给的数值范围如果接近int上限大约 21 亿就换long long。输出格式也要跟着改printf用%lldcin不用改。另一类问题是整除和取余。C 语言里整数除法是截断负数除法方向可能和数学预期不一致。题目如果涉及负数先想清楚要不要用浮点或者手动处理符号。这类题通常这么答先报数据范围再说类型选择最后说输出格式三步说完基本就稳了。4.2 模拟题的步骤拆解方法模拟题在这一百题里表现为「按题目描述的规则一步步算」。这类题不难难在步骤多、条件多漏一个分支就错。答题方法是先把题目里的规则逐条列成编号步骤再对照步骤写代码每写一段就回头对一遍规则。不要一边读题一边写那样很容易漏掉「如果……则……」里的某个分支。4.3 真题演练数列求和与奇偶判断拿一道典型的数列求和题来说题目要求求 1 到 n 的和多组输入。答题思路读 n用循环累加或者直接用公式n*(n1)/2。易错点在于 n 很大时乘积溢出所以要么用long long要么先除后乘。奇偶判断题的坑在于 0 算偶数负数取余在 C 里结果可能是负的判断条件要写成n % 2 0而不是n % 2 1来判断奇数。这些细节就是这一百题反复在练的东西。5. 易错点清单这一百题里最容易翻车的五个地方5.1 错在多组输入只读一组错在哪代码只处理了第一组数据就结束。为什么错没看清题目要求「多组输入」或者把while写成了if。怎么答对先确认题目是 EOF 还是先给组数EOF 用while(scanf(...)!EOF)给组数用循环。写完拿两组以上数据自测。5.2 错在输出格式多空格少换行错在哪每行末尾多打一个空格或者最后一组后面多一个空行。为什么错判题机逐字符比对格式完全一致才算对。怎么答对按题目样例严格对照行末不加多余空格组与组之间的空行看题目要求要求有就加没要求就不加。5.3 错在数组没初始化就累加错在哪统计类题目结果偏大或随机。为什么错局部数组默认是随机值直接累加等于在垃圾值上加。怎么答对定义时初始化 {0}或用memset循环下标和数组大小对齐。5.4 错在字符串换行没去掉错在哪字符串长度多 1比较和输出都不对。为什么错fgets会把换行符读进缓冲区。怎么答对读完判断末位是否为\n是就替换成\0判断前先确认长度大于 0。5.5 错在整数溢出没换类型错在哪大数相加结果为负或者明显偏小。为什么错int范围不够运算中途溢出。怎么答对看题目数据范围接近上限就换long long输出格式同步改成%lld。6. 答题节奏与押题思路把一百题刷成肌肉记忆刷这一百题最忌讳的是按题号从头到尾平均用力。更有效的做法是按考点分组刷先把多组输入的十几道题集中做完把 EOF、组数、终止值三种模式练到不用想就能写再集中做循环图形题把外层内层的数量关系练熟然后做字符串和数组重点练读入方式和边界最后扫一遍数学和模拟题专门盯溢出和分支遗漏。每组做完回头把 WA 的题重写一遍不看答案写完再对。押题思路也很清楚这一百题里反复出现的就是那几类多组输入、格式控制、循环嵌套、字符串读入、整数边界。机试或者课程上机如果范围就在前一百题重点把 1000、1001、1089 到 1094 这一串输入输出题刷到一次通过再把图形打印和字符串反转各练五道基本就覆盖了大部分考法。答题时养成一个固定动作读完题先在注释里写「输入形式、输出形式、边界条件」三行再动手写代码。这个习惯看着笨但能挡掉大部分因为读题不清导致的翻车。注意每道题提交前拿题目样例和自己造的两组边界数据各跑一遍样例过不代表边界过。从那以后我每次带人刷这一百题都强制要求先写那三行注释再写代码WA 率明显下降。希望帮到你。这份 1000-1099 的代码资源可以当作对照答案册按上面的分组顺序练练完一组对一组比从头到尾盲目提交省时间得多。本文还有配套的精品资源点击获取