华为OD机试真题 新系统 2026-07-15 Python&JS 实现【谁没交卷】
目录
题目
题目内容:
张老师组织了一场线上模拟考试,并要求考生使用学号登录网站进行考试。考试完成后张老师发现试卷提交不全,他需要找到哪些同学没有交卷。
若班级内有 N 个学生,则学号从 1 开始到 N 结束,每个学生一个学号。一个班级内学生个数不超过 80,即 0 < N <= 80。
请你编写一个程序,帮助张老师快速找到哪些学号的学生没有交卷。
输入描述:
班级内学生数量。
交卷学生的学号列表,由于是按照交卷时间排序的,学号是乱序的,同时本题确保学号是合法的,不存在小于 1 或大于 N 的学号。
输出描述:
未交卷学生的学号列表,按照学号升序排列。
样例 1
输入:
10
1,5,3,2,6,7,8,9,10
输出:
4
说明:
班级内共有 10 人,学号 1-10,学号为 4 的学生没有交卷。
样例 2
输入:
10
9,2,3,5,6,7
输出:
1,4,8,10
说明:
班级内共有 10 人,学号 1,4,8,10 的学生没有交卷。
样例 3
输入:
10
9,1,2,4,5,3,7,8,6,10
输出:
说明:
所有学生均进行了交卷,因此输出为空字符串。
思路
整体思路:这道题的核心是找出 1 到 N 之间哪些学号没有在交卷列表里出现。
第一步:先准备一个布尔数组,用来记录每个学号是否已经交卷。
因为题目已经保证学号合法,并且班级人数不超过 80,所以不需要哈希表或排序,数组下标直接对应学号即可。
例如 submitted[4] 表示学号 4 是否已经交卷,这样判断某个学生是否交卷就是一次数组访问。
第二步:读取交卷学生列表,按逗号拆分出每个学号。
交卷列表虽然是按交卷时间排序的,顺序可能是乱的,但我们只关心某个学号有没有出现过,所以读到一个学号就把对应数组位置标记为已交卷。
第三步:从 1 到 N 顺序扫描所有学号。
如果某个学号没有被标记,说明这个学生没有交卷,把它加入答案列表。
因为扫描顺序本来就是从小到大,所以答案天然满足升序输出,不需要再额外排序。
第四步:按逗号拼接答案列表。
如果所有学号都已交卷,答案列表为空,最终输出空字符串即可。

Code
import sys
def main():
lines = sys.stdin.read().splitlines()
if not lines:
return
n = int(lines[0].strip())
submitted_line = lines[1].strip() if len(lines) > 1 else ""
# 学号范围很小,直接用下标表示学号最清晰。
submitted = [False] * (n + 1)
if submitted_line:
for item in submitted_line.split(","):
# 题目保证交卷学号合法,这里只负责做出现标记。
submitted[int(item)] = True
missing = []
for student_id in range(1, n + 1):
# 顺序扫描可以同时完成升序输出要求。
if not submitted[student_id]:
missing.append(str(student_id))
print(",".join(missing))
if __name__ == "__main__":
main()
JS
const fs = require("fs");
const input = fs.readFileSync(0, "utf8").split(/
?
/);
if (input.length > 0 && input[0].trim() !== "") {
const n = Number(input[0].trim());
const line = input.length > 1 ? input[1].trim() : "";
// 学号范围很小,用数组下标直接记录是否交卷。
const submitted = Array(n + 1).fill(false);
if (line.length > 0) {
for (const part of line.split(",")) {
// 题目保证学号合法,这里只做出现标记。
submitted[Number(part)] = true;
}
}
const missing = [];
for (let id = 1; id <= n; id++) {
// 从小到大扫描,输出顺序自然就是升序。
if (!submitted[id]) {
missing.push(String(id));
}
}
process.stdout.write(missing.join(","));
}
【华为od机试真题Python+JS+Java+Go合集】【超值优惠】:Py/JS/Java/Go合集
【华为od机试真题Python】:Python真题题库
【华为od机试真题JavaScript】:JavaScript真题题库
【华为od机试真题Java&Go】:Java&Go真题题库
【华为od机试真题C++】:C++真题题库
【华为od机试真题C语言】:C语言真题题库
【华为od面试手撕代码题库】:面试手撕代码题库
【华为od机试面试交流群】【文章底部有二维码链接,可扫码加交流群】

华为OD机试:二本院校有机会吗? 有机会,但不大,大神除外!机考分数越高越好,所以需要提前刷题。机考通过后,如果没有收到面试邀请,也不要着急,非目标院校面试邀请发的时间比较晚。非目标院校今年有点难,机试至少要考到350分,所以需要疯狂刷题,华为OD机考是有题库的,最好在考前完所有题库题目。华为OD机试:跨专业可以参加华为OD可以,但是如果你的本科院校比较差,上岸概率不大。华为OD机试:华为OD简历被锁定机试通过,性格测试也通过,但是没人联系面试,发现简历被锁定。此时需要主动去联系HR。让他帮助你查询原因。
更多推荐



所有评论(0)