华为OD机试真题2026双机位C卷 Python&JS 实现【用户入网定期复评】
目录
题目
用户开立支付账户,在开户完成后立即对用户进行一次风险模型评级,输出一个评分风险,评分范围1-100,等区间的分为5个等级,1-19为等级1,20-39为等级2,40-59为等级3,60-79为等级4,80-100为等级5,系统每天会任务对全量入网用户进行计算复评时间,输出评分给出新的风险等级。复评规则如下:
等级1每36个月重评一次。
等级2每12个月重评一次。
等级3每8月重评一次。
等级4每6个月重评一次。
等级5每3个月重评一次。
每个月固定按照30天计算下次日期,即每3个月对应下次日期为90天后,其它同理。
如果上次评级时间和本次任务时间差,超过了该等级应该重评的时间,说明上次漏评,那么该等级自动评级提升1等级,按照新的等级计算下次一定重评时间,最高为等级5.
输入描述
输入共m+1行,每行信息如下:
1.第一行为m和task_date,中间以空格分割,m表示全量用户数,task_date表示本次评级任务启动时间。2.第2行到m+1行为m个用户信息,按顺序每个用户的信息格式为name(用户姓名),last rating-time(上次评级的时间,整数,表示从2000年1月1日起的天数),score(用户上一次的评分),以空格分割。
3.name为仅小写字母组成的字符串,字符串长度范围为[1-500]
输出描述
输出当前任务时间与上次复评时间小于等于5天的评级用户,逗号分割输出。
1.按照复评时间升序排序
2.用户复评时间一致按照姓名升序排序。示例1
输入
1 100
zhangsan 8 87输出
zhangsan
思路
虽然题目比较长,描述比较多,但是确实是个简单的逻辑模拟类题目。
- 根据评分算出等级(每20分一档,80-100归为等级5)
- 用等级查表得到重评周期(等级1=1080天,等级5=90天),算出下次复评时间 = 上次时间 + 周期
- 如果任务时间已超过复评时间(漏评),等级自动+1(上限5),用新等级重新算复评时间
- 筛选出复评时间与任务时间差 ≤ 5天的用户,按复评时间升序、同时间按姓名升序输出
Code
import sys
def solve():
lines = []
for line in sys.stdin:
lines.append(line.strip())
# 解析第一行:用户数 m 和任务日期 task_date
first = lines[0].split()
m = int(first[0])
task_date = int(first[1])
# 各等级对应的重评周期(天),等级1~5
period = {1: 36*30, 2: 12*30, 3: 8*30, 4: 6*30, 5: 3*30}
result = []
for i in range(1, m + 1):
parts = lines[i].split()
name = parts[0]
last_time = int(parts[1])
score = int(parts[2])
# 根据评分计算等级:1-19→1, 20-39→2, 40-59→3, 60-79→4, 80-100→5
if score <= 19:
level = 1
elif score <= 39:
level = 2
elif score <= 59:
level = 3
elif score <= 79:
level = 4
else:
level = 5
# 计算应复评时间
next_time = last_time + period[level]
# 如果任务时间已超过应复评时间,说明漏评,等级提升1级
if task_date > next_time:
level = min(level + 1, 5)
next_time = last_time + period[level]
# 筛选:复评时间与任务时间的差的绝对值 <= 5天
if abs(next_time - task_date) <= 5:
result.append((next_time, name))
# 按复评时间升序,时间相同按姓名升序
result.sort()
# 逗号分隔输出
print(",".join(item[1] for item in result))
solve()
JS
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin });
const lines = [];
rl.on('line', line => lines.push(line.trim()));
rl.on('close', () => {
// 解析第一行:用户数 m 和任务日期 task_date
const first = lines[0].split(' ');
const m = parseInt(first[0]);
const taskDate = parseInt(first[1]);
// 各等级对应的重评周期(天),等级1~5
const period = [0, 36*30, 12*30, 8*30, 6*30, 3*30];
const result = []; // 存 {nextTime, name}
for (let i = 1; i <= m; i++) {
const parts = lines[i].split(' ');
const name = parts[0];
const lastTime = parseInt(parts[1]);
const score = parseInt(parts[2]);
// 根据评分计算等级:1-19→1, 20-39→2, 40-59→3, 60-79→4, 80-100→5
let level;
if (score <= 19) level = 1;
else if (score <= 39) level = 2;
else if (score <= 59) level = 3;
else if (score <= 79) level = 4;
else level = 5;
// 计算应复评时间
let nextTime = lastTime + period[level];
// 如果任务时间已超过应复评时间,说明漏评,等级提升1级
if (taskDate > nextTime) {
level = Math.min(level + 1, 5);
nextTime = lastTime + period[level];
}
// 筛选:复评时间与任务时间的差的绝对值 <= 5天
if (Math.abs(nextTime - taskDate) <= 5) {
result.push({ nextTime, name });
}
}
// 按复评时间升序,时间相同按姓名升序
result.sort((a, b) => {
if (a.nextTime !== b.nextTime) return a.nextTime - b.nextTime;
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
});
// 逗号分隔输出
console.log(result.map(r => r.name).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机试面试交流群:830285880】【文章底部有二维码链接,可扫码加交流群】
华为OD机试:二本院校有机会吗?
有机会,但不大,大神除外!机考分数越高越好,所以需要提前刷题。机考通过后,如果没有收到面试邀请,也不要着急,非目标院校面试邀请发的时间比较晚。非目标院校今年有点难,机试至少要考到350分,所以需要疯狂刷题,华为OD机考是有题库的,最好在考前完所有题库题目。华为OD机试:跨专业可以参加华为OD可以,但是如果你的本科院校比较差,上岸概率不大。华为OD机试:华为OD简历被锁定机试通过,性格测试也通过,但是没人联系面试,发现简历被锁定。此时需要主动去联系HR。让他帮助你查询原因。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)