目录

题目

思路

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

思路

虽然题目比较长,描述比较多,但是确实是个简单的逻辑模拟类题目。

  1. 根据评分算出等级(每20分一档,80-100归为等级5)
  2. 用等级查表得到重评周期(等级1=1080天,等级5=90天),算出下次复评时间 = 上次时间 + 周期
  3. 如果任务时间已超过复评时间(漏评),等级自动+1(上限5),用新等级重新算复评时间
  4. 筛选出复评时间与任务时间差 ≤ 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。让他帮助你查询原因。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐