1. 东华OJ平台101-103题解析
东华OJ(Online Judge)是东华大学计算机学院开发的在线编程评测系统,主要用于学生编程练习和算法训练。101-103题是该平台的基础入门题目,适合刚接触编程的新手练习基本语法和逻辑思维。
提示:虽然题目编号连续,但实际难度和考察点可能完全不同,需要分别对待。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 101题:A+B Problem
2.1 题目要求分析
这是OJ系统最经典的入门题,要求读取两个整数A和B,然后输出它们的和。看似简单,但考察了几个核心能力:
- 基本输入输出操作
- 变量定义和数据类型选择
- 简单的算术运算
2.2 各语言实现方案
2.2.1 C语言实现
c复制#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}
关键点说明:
- 使用
scanf读取输入时要注意格式字符串与变量地址的对应 - 输出时记得换行符
\n,这是OJ系统常见的格式要求
2.2.2 Python实现
python复制a, b = map(int, input().split())
print(a + b)
Python版本更简洁,但需要注意:
input()读取的是字符串,需要用split()分割map(int, ...)将字符串转换为整数- 多变量同时赋值是Python的特性
2.3 常见错误排查
- 变量未初始化直接使用
- 输入格式不匹配(如用逗号分隔而非空格)
- 输出格式不符合要求(缺少换行或多余空格)
- 数据范围考虑不足(虽然本题明确是整数,但其他题目可能需要考虑大数)
3. 102题:温度转换
3.1 题目理解
题目要求将华氏温度F转换为摄氏温度C,转换公式为:C = 5×(F-32)/9。需要保留两位小数输出。
3.2 关键实现细节
3.2.1 浮点数处理
c复制#include <stdio.h>
int main() {
double f, c;
scanf("%lf", &f);
c = 5 * (f - 32) / 9;
printf("%.2lf\n", c);
return 0;
}
注意事项:
- 必须使用浮点类型(float或double)
- 输出格式
%.2lf控制小数点后两位 - 整数除法与浮点除法的区别(5/9会得0)
3.2.2 精度问题进阶讨论
在更严格的场景中,需要考虑:
- 使用
double而非float提高精度 - 避免大数相减导致的精度损失
- 比较浮点数时使用误差范围而非直接
==
3.3 测试用例设计
有效的测试应该包括:
- 正常温度值(如32°F→0°C)
- 边界值(如-40°F=-40°C)
- 极端值(如10000°F)
- 非整数输入(如98.6°F)
4. 103题:数列求和
4.1 问题描述
给定正整数n,计算1+2+3+...+n的和。禁止使用公式n(n+1)/2,必须用循环实现。
4.2 实现方案对比
4.2.1 for循环实现
c复制#include <stdio.h>
int main() {
int n, sum = 0;
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
sum += i;
}
printf("%d\n", sum);
return 0;
}
4.2.2 while循环实现
c复制int i = 1;
while(i <= n) {
sum += i;
i++;
}
4.2.3 性能考量
虽然题目限制使用公式,但实际工程中:
- 循环实现时间复杂度O(n)
- 公式法时间复杂度O(1)
- 当n很大时(如1e9),循环实现会超时
4.3 常见陷阱
- 累加变量未初始化为0
- 循环条件错误(如i<n而非i<=n)
- 整数溢出(当n很大时sum可能超出int范围)
- 输入未验证(如n为负数的情况)
5. OJ系统通用技巧
5.1 输入输出优化
- C++中使用
ios::sync_with_stdio(false)加速输入输出 - 大量数据时避免频繁的
printf/scanf,考虑批量处理 - Python中使用
sys.stdin读取大数据量
5.2 调试方法
- 本地测试:先在小数据集上验证
- 边界测试:0值、最大值等特殊情况
- 使用printf调试:输出中间变量值
- 对比他人AC代码:找出差异点
5.3 编码规范建议
- 变量命名有意义(如sum而非s)
- 适当添加注释,特别是算法关键步骤
- 保持代码缩进一致
- 函数不宜过长,超过50行考虑拆分
6. 题目扩展思考
6.1 101题变种
- 大数加法(超出基本数据类型范围)
- 浮点数加法(精度处理)
- 多组输入直到特定条件结束
6.2 102题进阶
- 双向转换(C→F)
- 温度单位换算表生成
- 考虑绝对零度等物理限制
6.3 103题延伸
- 奇数和/偶数和
- 平方和/立方和
- 交替符号求和(如1-2+3-4...)
在实际教学中,这三道题通常作为编程入门的第一课,帮助学生建立最基本的编程思维。从我的经验来看,很多学生卡住的原因往往不是算法本身,而是对编程语言的基本语法不熟悉,或者没有仔细阅读题目要求。建议初学者:
- 先完全理解题目要求
- 在纸上写出伪代码
- 逐步转换为实际代码
- 测试各种边界情况
对于OJ系统的使用,初期可以多参考其他人的正确代码,但一定要理解每行代码的作用,而不是简单复制。随着练习量的增加,会逐渐掌握各类题型的解题模式。101-103虽然简单,但包含了输入输出、算术运算、循环控制等编程基础要素,是后续学习的重要基石。
