华为OD机试 - 芯片资源限制(Java 2024 C卷 100分)

news/2024/7/20 19:26:08 标签: 华为od, java, 芯片资源限制

在这里插入图片描述

华为OD机试 2024C卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

一个业务芯片的容量为10G,可支持两种不同的业务类型A、B。芯片的约束如下:

1.A业务容量为2.5G,一个芯片上最多可配置4路业务;
2.B业务容量为10G,一个芯片上最多可配置1路业务;
3.由于业务容量限制,配置了A业务后,该芯片就不能配置B业务;
4.不能跨芯片占用资源,即业务只能配置在一块芯片上,不能占用一块芯片的容量,再占用另外芯片容量;
5.为了保证使用最少的芯片资源,业务配置时,按芯片编号从小到大顺序依次配置,并优先使用已经占用的芯片。
由于业务容量最小为2.5G,以最小业务容量为单位,一个芯片可以划分为4个资源区,将资源区依次编号为1,2,3,4。

一块板卡上有M块芯片,用户进行一系列业务配置后,请输出最后一个业务对应的芯片编号和芯片资源D,如果没有可用资源返回0 0

二、输入描述

板卡芯片数量M,芯片范围为1-32
用户业务配置数量N,数量为1-128
用户业务配置,业务配置间以空格分割

三、输出描述

芯片编号 资源区编号

四、Java算法源码

java">public class Test03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 板卡芯片数量
        int M = Integer.valueOf(sc.nextLine());
        // 用户业务配置数量
        int N = Integer.valueOf(sc.nextLine());
        // 用户业务配置
        String[] arr = sc.nextLine().split(" ");
        int a = 0; // 记录芯片被业务A的使用个数,即芯片资源ID
        int idx1 = 1; // 未满状态的第一块芯片编号
        int idx2 = 1; // 全空状态的第一块芯片编号
        for (int i = 0; i < N - 1; i++) {  // 前N-1个业务的分配
            // A业务容量为2.5G,一个芯片上最多可配置4路业务
            if (arr[i].charAt(0) == 'A') {
                if (a + 1 == 4) {
                    a = 0;
                    idx1 = idx2;
                } else {
                    a++;
                    if (idx1 == idx2) {
                        idx2++;
                    }
                }
            } else if (arr[i].charAt(0) == 'B') {// B业务容量为10G,一个芯片上最多可配置1路业务
                if (idx1 == idx2) {
                    idx1++;
                    idx2++;
                } else {
                    idx2++;
                }
            }
        }

        // 判断最后一个
        if (arr[N - 1].charAt(0) == 'A') {
            if (idx1 > M) {
                System.out.println(0);
                System.out.println(0);
            } else {
                System.out.println(idx1);
                System.out.println(a + 1);
            }
        } else {
            if (idx2 > M) {
                System.out.println(0);
                System.out.println(0);
            } else {
                System.out.println(idx2);
                System.out.println(1);
            }
        }
    }
}

五、效果展示

1、输入

5
6
A B A B A A

2、输出

1
4

3、说明

A:第一块芯片配置A,占用芯片编号:1,资源ID:1,芯片容量未使用完
B:第二块芯片配置B,占用芯片编号:2,资源ID:1,芯片容量已经使用完
A:由于第一块芯片还能配置,故占用芯片编号:1,资源ID:2
B:第一块芯片虽然没有占满,但是A业务和B业务相斥,只能新占用,故占用芯片编号:3,资源ID:1
A:由于第一块芯片还能配置,故占用芯片编号:1,资源ID:3
A:由于第一块芯片还能配置,故占用芯片编号:1,资源ID:4

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.niftyadmin.cn/n/5461908.html

相关文章

MySQL 8.0 的魔法:即刻列操作——再也不用等待了

概述 在MySQL 8.0.12版本之后我们不用为大表添加列问题担心了&#xff0c;然后MySQL 8.0.28版本之后我们不用为大表删除列而担心了。 背景 在MySQL数据库中&#xff0c;行数据会被持久化到硬盘&#xff0c;当然每行的列支也被存储到硬盘上。当我们向已有的表中添加/删除列时…

[C++面向对象]很难蒙混过关的CArray3d三维数组模板类

07:很难蒙混过关的CArray3d三维数组模板类 描述 实现一个三维数组模版CArray3D&#xff0c;可以用来生成元素为任意类型变量的三维数组&#xff0c;输出指定结果 #include <iostream> #include <iomanip> #include <cstring> using namespace std; templ…

对话 Mines of Dalarnia: Web3 游戏创新,社区驱动与公链共建

作者&#xff1a;stellafootprint.network 嘉宾&#xff1a;Manfred Pack&#xff0c;Mines of Dalarnia 游戏开发总监 采访者&#xff1a;Alex Cooper&#xff0c;Footprint Analytics 北美社区与 BD 负责人 在区块链游戏领域&#xff0c;去中心化和玩家经济正在颠覆传统游戏…

用c++实现Catalan数列、伯努利错装信封问题

4.2.2 Catalan数列 【问题】Catalan数列是欧拉在计算凸多边形的三角形剖分问题时得到的。在一个凸n(n>3)边形中&#xff0c;通过插入内部不相交对角线将其剖分成一些三角形区域&#xff0c;问有多少种不同的分法?三角形只有一种剖分方法&#xff0c;图4-1所示是四边形的两…

第十五届蓝桥杯第二期模拟赛——python

第一题 填空题 1、问题描述 小蓝要在屏幕上放置一行文字&#xff0c;每个字的宽度相同。 小蓝发现&#xff0c;如果每个字的宽为 36 像素&#xff0c;一行正好放下 30 个字&#xff0c;字符之间和前后都没有任何空隙。 请问&#xff0c;如果每个字宽为 10 像素&#xff0c;字符…

算法学习——LeetCode力扣动态规划篇10(583. 两个字符串的删除操作、72. 编辑距离、647. 回文子串、516. 最长回文子序列)

算法学习——LeetCode力扣动态规划篇10 583. 两个字符串的删除操作 583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09; 描述 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个…

RecyclerView 调用 notifyItemInserted 自动滚动到底部的问题

项目中发现一个奇怪的现象 RecyclerView 加载完数据以后&#xff0c;调用 notifyItemInserted 方法&#xff0c;RecyclerView 会滑动到底部。 简化后的效果图&#xff1a; 因为这个 RecyclerView 的适配器有一个 FootViewHolder&#xff0c;所以怀疑是 FootViewHolder 的问题…

Golang基础-7

Go语言基础 介绍 基础 函数 函数定义 函数调用 函数形参 函数返回值 递归函数 匿名函数与闭包 介绍 本文介绍Go语言中函数(函数定义、函数调用、函数形参、函数返回值、递归函数、匿名函数与闭包)等相关知识。基础 函数 函数是对代码片段的逻辑封装的集合。函数的作用就是提…