华为OD机试真题2026双机位C卷 PythonJS 实现【用户入网定期复评】
目录
题目
思路
Code
题目
用户开立支付账户,在开户完成后立即对用户进行一次风险模型评级,输出一个评分风险,评分范围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。让他帮助你查询原因。
