首页 > 其他分享 >华为OD机试真题---手机App防沉迷系统

华为OD机试真题---手机App防沉迷系统

时间:2024-09-29 08:50:58浏览次数:10  
标签:优先级 真题 防沉迷 App 09 应用程序 时间 注册

题目概述

智能手机在方便我们生活的同时,也侵占了大量时间。手机App防沉迷系统旨在帮助用户合理规划手机App使用时间,确保在正确的时间做正确的事。系统的主要功能包括:

  • 在一天24小时内,可注册每个App的允许使用时段。
  • 一个时段只能使用一个App,即不能同时注册多个App在同一时间段内使用。
  • App有优先级,数值越高,优先级越高。注册时,如果高优先级的App时间和低优先级的时段有冲突,系统会自动注销低优先级的时段;如果App的优先级相同,则后添加的App不能注册。

编程实现

编程实现时,需要处理输入数据,包括App的数量、每个App的注册信息(名称、优先级、起始时间、结束时间),并根据输入的时间点返回该时间点可用的App名称。如果时间点没有注册任何App,则返回“NA”。


运行示例解析

以下是一个具体的运行示例及其解析:

输入示例
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20
解析过程
  1. 读取输入

    • 第一行表示要注册的App数量,这里是2。
    • 接下来两行是App的注册信息:
      • App1,优先级1,注册时段09:00-10:00。
      • App2,优先级2,注册时段09:10-09:30。
    • 最后一行是查询时间点,这里是09:20。
  2. 处理注册信息

    • 根据注册信息,将App及其相关信息存储起来,并检查时间冲突和优先级。
    • 在这个例子中,App1和App2的注册时段有冲突(09:10-09:30重叠)。由于App2的优先级(2)高于App1(1),系统会注销App1在该时间段的注册,只保留App2的注册信息。
  3. 查询时间点

    • 查询时间为09:20,根据已注册的App信息,此时可用的App是App2。
输出结果
App2

编程注意事项

  • 输入数据的格式和范围需要严格检查,确保符合题目要求。
  • 时间处理时,需要注意起始时间和结束时间的比较,以及注册信息中的时间段是否包含起始时间点但不包含结束时间点。
  • 优先级处理时,需要确保高优先级的App能够覆盖低优先级的App的注册信息。
  • 如果存在多个App在同一时间点冲突且优先级相同的情况,需要按照题目要求处理(如后添加的App不能注册)。

代码实现

import java.util.*;

public class AppScheduler {

    private final Map<String, Integer> appPriorityMap;
    private final Map<Integer, String> timeSlotMap;

    public AppScheduler() {
        appPriorityMap = new HashMap<>();
        timeSlotMap = new TreeMap<>();
    }

    /**
     * 注册应用程序的优先级和运行时间
     * 
     * @param appName 应用程序的名称
     * @param priority 应用程序的优先级,数值越小优先级越高
     * @param startTime 应用程序开始运行的时间(格式为"HH:mm")
     * @param endTime 应用程序结束运行的时间(格式为"HH:mm")
     */
    public void registerApp(String appName, int priority, String startTime, String endTime) {
        // 将开始时间和结束时间转换为小时数
        int startHour = parseTime(startTime);
        int endHour = parseTime(endTime);
    
        // 如果应用程序还不在优先级映射中,直接添加
        if (!appPriorityMap.containsKey(appName)) {
            appPriorityMap.put(appName, priority);
        } else {
            // 如果应用程序已经在优先级映射中,只有当新优先级更高时才更新
            int currentPriority = appPriorityMap.get(appName);
            if (priority < currentPriority) {
                return;
            }
            appPriorityMap.put(appName, priority);
        }
    
        // 遍历应用程序的运行时间,尝试在时间槽映射中注册
        for (int i = startHour; i < endHour; i++) {
            // 如果时间槽已经被占用,只有当新优先级更高时才替换
            if (timeSlotMap.containsKey(i)) {
                String existingAppName = timeSlotMap.get(i);
                int existingPriority = appPriorityMap.get(existingAppName);
                if (priority > existingPriority) {
                    timeSlotMap.put(i, appName);
                }
            } else {
                // 如果时间槽未被占用,直接注册
                timeSlotMap.put(i, appName);
            }
        }
    }

    /**
     * 根据查询时间获取应用程序名称
     * 此方法用于根据给定的查询时间确定并返回对应的应用程序名称如果在给定的时间段内找不到确切的应用程序,则返回"NA"
     * 
     * @param queryTime 查询时间,将被解析以确定对应的时间段
     * @return 在指定时间段内运行的应用程序的名称,如果找不到则返回"NA"
     */
    public String getAppAtTime(String queryTime) {
        // 解析查询时间,返回对应的小时数
        int queryHour = parseTime(queryTime);
        // 根据查询时间对应的小时数,在时间槽映射中查找对应的应用程序名称,如果找不到,则默认返回"NA"
        return timeSlotMap.getOrDefault(queryHour, "NA");
    }

    /**
     * 解析时间字符串为分钟数
     * 
     * @param time 时间字符串,格式为"hh:mm",其中hh为小时数,mm为分钟数
     * @return 从午夜开始到指定时间的总分钟数
     */
    private int parseTime(String time) {
        // 将时间字符串按":"分割,得到小时和分钟部分
        String[] parts = time.split(":");
        // 计算总分钟数,小时数乘以60加上分钟数
        return Integer.parseInt(parts[0]) * 60 + Integer.parseInt(parts[1]);
    }

    /**
     * 主函数,用于处理应用程序调度器的输入和输出
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 创建Scanner对象,读取系统输入
        Scanner scanner = new Scanner(System.in);
        
        // 读取并存储输入的程序数量
        int numApps = scanner.nextInt();
        // 消费掉输入中的换行符,准备读取下一行数据
        scanner.nextLine();

        // 创建应用程序调度器实例
        AppScheduler scheduler = new AppScheduler();

        // 循环读取每个应用程序的注册信息,并注册到调度器中
        for (int i = 0; i < numApps; i++) {
            // 读取应用程序名称、优先级、开始时间和结束时间
            String appName = scanner.next();
            int priority = scanner.nextInt();
            String startTime = scanner.next();
            String endTime = scanner.next();
            
            // 在调度器中注册应用程序
            scheduler.registerApp(appName, priority, startTime, endTime);
        }

        // 读取查询的时间点
        String queryTime = scanner.next();
        // 输出在查询时间点正在运行的应用程序信息
        System.out.println(scheduler.getAppAtTime(queryTime));
    }

}


解析步骤

1、定义数据结构:

  • appPriorityMap:存储 App 名称和优先级。
  • timeSlotMap:存储时间段和对应的 App 名称。

2、处理输入数据:

  • 读取输入并解析。

3、注册 App:

  • 根据优先级和时间冲突处理注册信息。

4、查询 App:

  • 根据时间点查询可用的 App 名称。
示例运行
输入示例
2  
App1 1 09:00 10:00  
App2 2 09:10 09:30  
09:20
输出结果
App2

标签:优先级,真题,防沉迷,App,09,应用程序,时间,注册
From: https://blog.csdn.net/lbp0123456/article/details/142587717

相关文章

  • uniapp [安卓苹果App端] - 详细实现手机蓝牙连接打印机及打印票据小票/标签/面单/热敏
    前言网上的教程乱七八糟,文本提供优质示例代码。在uni-appApp端(安卓APP|苹果APP)开发中,详解实现“手机蓝牙连接并使用蓝牙打印机”,uniAppApp端手机使用蓝牙连接打印机进行打印的相关功能,uniapp苹果安卓app实现开启蓝牙并搜索附近范围的蓝牙打印机对接全流程,支持打印......
  • 海外盲盒APP系统:盲盒出海热潮下的选择
    近年来,盲盒市场展现出了强劲的发展态势,不仅在国内持续上演“盲盒热”,在海外市场中更是“一盒难求”!在盲盒出海的浪潮下,盲盒在国际市场中迅速火爆,一时席卷了全球市场。海外盲盒系统是企业拓展海外市场的一种新渠道,利用互联网的优势运营,根据当地的文化背景进行主题设计,打造出便捷、有......
  • 香香漫画app正版免费版下载-香香漫画app
    香香漫画app正版免费版下载-香香漫画app在数字媒体蓬勃发展的今天,网络成为了各种艺术形式展现自身魅力的舞台。作为其中一个重要的组成部分,漫画以其独特的视觉叙事方式吸引了无数读者的目光。香香漫画app正版免费版下载:http://xf.oubaidu.com/“香香漫画”作为一个新兴的漫......
  • JAVA_uniapp微信小程序获取手机号
    废话不多说封装好的代码和演示,开箱即用packagecom.ruoyi.system.util;importcom.alibaba.fastjson.JSONObject;importorg.springframework.stereotype.Service;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;......
  • 第五:APP弱网测试工具(QNET)
    一.目前在测试移动设备上进行弱网络专项测试的方案主要有两种1.通过Android设备连接到PC上进行弱网络测试1.1.比如Fiddler,Charles,NET-Simulator等1.2.基本思路是在PC上装个Fiddler网络抓包工具1.3.然后再将Android设备的网络代理到PC上1.4.通过在PC上的Fiddler在设置......
  • APP逆向实战:喜马拉雅(OLLVM混淆,字符串加密)
    喜马拉雅抓包:POST/mobile/login/pwd/v3HTTP/1.1Cookie:1&_device=android&fcecf4c4-5ddc-30e3-86b1-6e675f92bfd0&6.6.99;channel=and-f5;impl=com.ximalaya.ting.android;osversion=29;fp=009527657x2022q22564v0500000000000000000000000000000000000000;devic......
  • Vue3 + Pinia 仿抖音项目:移动端最佳实践,体验原生App般流畅
    嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法摘要:在移动端开发领域,Vue.js一直以其轻量级和易用性著称。今天,我们要介绍的是一个将Vue3和Pinia结合使用的开源项目——Douyin-Vue,这是一个模仿抖音(TikTok)的移动端短视频应用,展现了......
  • RocksDB代码分析——LogAndApply
    这里我们主要分析VersionSet::LogAndApply是怎么管理writer队列的。参数里的edit_lists是需要被apply的改动。每个传入的columnfamilydata对应edit_lists里的一个editlist,即autovector<VersionEdit*>。接下来把每个editlist打包成一个ManifestWriter,放进std::deque<Manifest......
  • Applied Econ 440.602: Macroeconomic Theory
    ProblemSet2AppliedEcon440.602:MacroeconomicTheoryFall,20241.AccommodatingTechnicalChange.Consideraneconomywithlinearconsumptionandinvestmentfunctions:C=c0+c1×Y                   (1)I=b0+......
  • 第一章数据管理【4’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)
    1、以下哪个不是DAMA-DMBOK的数据管理框架图?(知识点:第一章数据管理)A.DAMA车轮图B.DMBOK金字塔图C.环境因素六边形图D.知识领域语境关系图参考答案:B题目解析:DMBOK2第一章数据管理1.3.3,DAMA-DMBOK框架2、以下关于数据管理原则描述正确的是?(知识点:第一章数据管理)A.......