华为OD机试真题B卷 Java 实现【水仙花数】,附详细解题思路

news2024/12/28 5:33:52

一、题目描述

所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。

例如153是水仙花数,153是一个3位数,并且153 = 1^3 + 5^3 + 3^3。

二、输入描述

第一行输入一个整数n,表示一个n位的正整数。n在3到7之间,包含3和7。

第二行输入一个正整数m,表示需要返回第m个水仙花数。形如HH:SS字符串,表示原始输入。

三、输出描述

返回长度是n的第m个水仙花数。个数从0开始编号。

若m大于水仙花数的个数,返回最后一个水仙花数和m的乘积。

若输入不合法,返回-1。

四、解题思路

  1. 读取输入的n和m;
  2. 检查n的范围是否在3到7之间,如果不在范围内,输出-1并结束程序;
  3. 根据n的值计算出范围内的最小值和最大值,最小值为10的(n-1)次方,最大值为10的n次方减1;
  4. 初始化一个HashMap用于存储水仙花数,键为水仙花数的序号,值为水仙花数本身;
  5. 初始化计数器count为0,用于记录水仙花数的个数;
  6. 初始化变量lastNum为0,用于记录最后一个水仙花数;
  7. 遍历从最小值到最大值的范围,对每个数进行如下操作:
    • 调用check方法检查该数是否为水仙花数,如果是,则将其添加到HashMap中,键为count,值为当前数,然后将count加1。
    • 如果当前数大于lastNum,则更新lastNum的值为当前数。
  8. 根据HashMap判断第m个水仙花数是否存在,如果存在,则输出对应的值;如果不存在,则输出lastNum乘以m的值;

五、Java算法源码

public static void main(String[] args) {
    calculate();
}

private static void calculate() {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    if (n >= 3 && n <= 7) {
        int m = sc.nextInt();
        int temp = 1;
        for (int i = 0; i < n; i++) {
            temp *= 10;
        }
        int min = temp / 10;
        int max = temp - 1;
        Map<Integer, Integer> data = new HashMap<>();
        int count = 0;
        int lastNum = 0;
        for (int i = min; i <= max; i++) {
            if (check(i, n)) {
                data.put(count++, i);
                if (i > lastNum) {
                    lastNum = i;
                }
            }
        }
        if (data.containsKey(m)) {
            System.out.println(data.get(m));
        } else {
            System.out.println(lastNum * m);
        }
    } else {
        System.out.println(-1);
    }
}

private static boolean check(int a, int n) {
    boolean flag = false;
    String[] numStrs = String.valueOf(a).split("");
    int[] data = new int[numStrs.length];
    for (int i = 0; i < numStrs.length; i++) {
        data[i] = Integer.parseUnsignedInt(numStrs[i]);
    }
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum += calcute(data[i], n);
    }
    if (sum == a) {
        flag = true;
    }
    return flag;
}

private static int calcute(int a, int b) {
    int result = 1;
    for (int i = 0; i < b; i++) {
        result *= a;
    }
    return result;
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机组成原理·笔记】系统总线概念

系统总线概念 各部件之间为了通信&#xff0c;单独连线&#xff0c;太复杂&#xff0c;于是诞生了总线的概念 基本概念 是一组能为多个部分分时共享的公共信息传送路线 总线分类 按传送方式 串行&#xff1a;在总线上1位1位的传输和接收并行&#xff1a;多位在总线上传输…

电脑计算机提示msvcp120.dll丢失该怎么修复

首先&#xff0c;让我们了解一下msvcp120.dll是什么&#xff0c;以及它的作用。msvcp120.dll是一个系统文件。它的作用是提供微软Visual C运行库的函数&#xff0c;以便应用程序可以使用这些函数来实现所需的功能。当您在运行某个程序时&#xff0c;如果发现出现了msvcp120.dll…

【备战秋招】每日一题:4月1日美团春招(二批)第五题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

面试专题:JAVA虚拟机(1)

关于Java虚拟机&#xff0c;在面试的时候一般会问的大多就是①Java内存区域、②虚拟机垃圾算法、③虚拟机垃圾收集 器、④JVM内存管理、⑤JVM调优、⑥Java类加载机制这些问题了。推荐书籍《深入理解Java虚拟机&#xff1a;JVM高级特性 与最佳实践&#xff08;第二版》、《…

嵌入式Linux驱动开发 04:基于设备树的驱动开发

文章目录 目的基础说明开发准备设备树调整驱动程序与测试总结设备树文件内容 目的 前面文章 《嵌入式Linux驱动开发 03&#xff1a;平台&#xff08;platform&#xff09;总线驱动模型》 引入了资源和驱动分离的概念&#xff0c;这篇文章将在前面基础上更进一步&#xff0c;引…

内网或者没有公网IP,如何轻松通过公网访问?

很多网友都面临一个普遍的问题&#xff0c;就是作为家庭宽带用户没有公网IP&#xff0c;即没有IP v4的公网IP&#xff0c;我们天天盼着有一天IP v6能够普及。IP v4一共有2的32次方个地址&#xff0c;约43亿&#xff0c;中国仅为7000多万个&#xff0c;IP v6一共有2的128次方个地…

MySQL8.0版本在CentOS系统的配置教程

1.安装MySQL MySQL安装完成后&#xff0c;会自动配置为名称叫做&#xff1a;mysqld的服务&#xff0c;可以被systemctl所管理&#xff0c;我们在进行系统的配置时&#xff0c;主要修改root密码和允许root远程登录。 # 通过grep命令&#xff0c;在/var/log/mysqld.log文件中&a…

iOS开发:__weak __strong解决Block嵌套

Block使用会存在循环引用的问题&#xff0c;多个Block嵌套使用的情况更复杂&#xff0c;还会出现对象nil的问题。 为什么会循环引用&#xff1f; 现在iOS开发都是在ARC引用计数管理模式下的&#xff0c;参考另一篇文章《Block底层原理》&#xff0c;我们知道Block访问外部变量…

文心一言 VS 讯飞星火 VS chatgpt (29)-- 算法导论5.2 1题

一、在 HIRE-ASSISTANT 中&#xff0c;假设应聘者以随机顺序出现&#xff0c;你正好雇用一次的概率是多少&#xff1f;正好雇用 n 次的概率是多少? 文心一言&#xff1a; 讯飞星火&#xff1a; 华为盘古&#xff1a; 在HIRE-ASSISTANT中&#xff0c;假设应聘者以随机顺序出现…

仙境传说RO:从零开始编译服务端开发环境搭建安装Pandas-rAthena

仙境传说RO&#xff1a;从零开始编译服务端开发环境搭建安装Pandas-rAthena 大家好&#xff0c;我是艾西今天跟大家分享下仙境传说RO 开发脚本环境搭建。 Pandas是RO的模拟器实际上是开源的一个叫做rAthenna的一个开源项目 准备工具&#xff1a; Git 2.25.0 Setup建议放入D盘…

【消息队列】| 队列的优势介绍及应用场景

目录 &#x1f981; 前言&#x1f981; 那么MQ的优势在哪里&#xff1f;&#x1f981; 应用场景&#x1f981; 最后 &#x1f981; 前言 消息队列&#xff1a;MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于系统…

javaweb课程设计——商城项目

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;项目专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

2.2 动态范围的常用计算方法

1. 动态范围的常用计算方法 动态范围(Dynamic Range)指的是输入数据中数值的范围&#xff0c;计算动态范围是为了确定量化时使用的比特位数(还是抽象&#x1f602;)。个人理解:考虑到输入数据可能存在数据分布不均&#xff0c;即有些数据偏离过大。而过大的偏离值&#xff0c;会…

Ansys Zemax | NSC 非序列矢高图用户分析

本文介绍如何使用 NSC 矢高图用户分析功能在非序列模式下测量和显示对象的矢高。了解此功能的基础知识&#xff0c;包括如何设置复杂 CAD 零件的文件以获取特定面的矢高值。&#xff08;联系我们获取文章附件&#xff09; 介绍 OptocStudio 的序列模式具有表面矢高分析功能&…

硬件系统工程师宝典(28)-----关于LDO,应该知道的事

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到BJT配合MOSFET控制电源开关的四种电路以及MOSFET的均流电路。今天我们来讲讲LDO的应用分析。 LDO的结构 LDO&#xff08;Low Dropout R…

Linux内核源码的配置和编译

目录 配置交叉编译工具链 读README 配置内核源码支持当前的硬件平台 驱动配置 内核编译 编译&#xff1a; 问题&#xff1a; 解决问题的方法&#xff1a; 测试内核 配置交叉编译工具链 打开内核源码顶层目录的Makefile&#xff0c; hqUbuntu:~/fs6818_uboot/kernel-3.4.39$ vi …

IP地址、子网划分

目录 一、IP地址1.IP地址表示2.分类IP地址3.无分类编址 CIDR4.特殊IP地址 二、子网划分1.子网、子网掩码、子网划分VLSM2.网络地址、广播地址3.示例1&#xff1a;等分为两个子网3.1 划分前&#xff1a;3.2 划分后&#xff1a; 4.示例2&#xff1a;等分为四个子网3.1 划分前&…

五种经典IO模型详解

目录 同步和异步同步阻塞IO模型基本概念应用场景优缺点 同步非阻塞IO模型基本概念应用场景优缺点 IO多路复用模型信号驱动IO模型回顾复习1.信号2.产生信号的条件3.可重入函数4.为什么中断处理函数不能直接调用不可重入函数5.如何写出可重入的函数 基本概念应用场景优缺点 异步I…

【操作系统】 1、计算机系统概述

1.1 操作系统的基本概念 从操作系统的角度上来划分计算机体系结构&#xff1a; 这里注意一点&#xff1a; 编译器属于应用程序。 操作系统&#xff1a;是指控制和管理计算机系统的 硬件 和软件 资源&#xff0c;合理的组织、调度计算机的工作与资源分配&#xff0c;进而为用…

对象数组练习案例

定义一个长度为3的数组&#xff0c;数组存储1~3名学生对象作为初始数据&#xff0c;学生对象的学号&#xff0c;姓名各不相同。 * 学生的属性&#xff1a;学号、姓名、年龄 * 要求1&#xff1a;再次添加一个学生对象&#xff0c;并在添加的时候进行学号的唯一性判断 * 要求2&am…