华为OD机试真题-密码强度等级【2023】【JAVA】

news2024/10/6 0:29:51

在这里插入图片描述

一、题目描述

密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

1、密码长度:

5 分: 小于等于4 个字符
10 分: 5 到7 字符
25 分: 大于等于8 个字符

2、字母:

0 分: 没有字母
10 分: 密码里的字母全都是小(大)写字母
20 分: 密码里的字母符合”大小写混合“

3、数字:

0 分: 没有数字
10 分: 1 个数字
20 分: 大于1 个数字

4、符号:

0 分: 没有符号
10 分: 1 个符号
25 分: 大于1 个符号

5、奖励(只能选符合最多的那一种奖励):

2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号

6、最后的评分标准:

= 90: 非常安全
= 80: 安全(Secure)
= 70: 非常强
= 60: 强(Strong)
= 50: 一般(Average)
= 25: 弱(Weak)
= 0: 非常弱(Very_Weak)

7、对应输出为:

VERY_SECURE
SECURE
VERY_STRONG
STRONG
AVERAGE
WEAK
VERY_WEAK

请根据输入的密码字符串,进行安全评定。

8、注意:

字母:a-z, A-Z
数字:0-9
符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
!"#$%&'()*+,-./ (ASCII码:0x21~0x2F)
:;<=>?@ (ASCII码:0x3A~0x40)
[]^_` (ASCII码:0x5B~0x60)
{|}~ (ASCII码:0x7B~0x7E)

9、提示:

1 <= 字符串的长度<= 300

二、输入描述

输入一个string的密码。

三、输出描述

输出密码等级。

四、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    while (sc.hasNextLine()) {
        char[] ch = sc.nextLine().toCharArray();
        int score = 0;

        //统计长度
        int len = ch.length;
        if (len <= 4) {
            score += 5;
        } else if (len > 4 && len < 8) {
            score += 10;
        } else {
            score += 25;
        }

        //遍历获取大小写字母、数字、符号数目
        int upCount = 0;
        int lowCount = 0;
        int numCount = 0;
        int sigCount = 0;

        for (int i = 0; i < len; i++) {
            if (Character.isUpperCase(ch[i])) {
                ++upCount;
            } else if (Character.isLowerCase(ch[i])) {
                ++lowCount;
            } else if (Character.isDigit(ch[i])) {
                ++numCount;
            } else {
                ++sigCount;
            }
        }

        //字母分数
        if ((upCount > 0 && lowCount == 0) || (upCount == 0 && lowCount > 0)) {
            score += 10;
        } else if (upCount > 0 && lowCount > 0) {
            score += 20;
        } else {
            score += 0;
        }

        //数字分数
        if (numCount == 1) {
            score += 10;
        } else if (numCount > 1) {
            score += 20;
        } else {
            score += 0;
        }

        //符号分数
        if (sigCount == 1) {
            score += 10;
        } else if (sigCount > 1) {
            score += 25;
        } else {
            score += 0;
        }

        //奖励分数
        if (numCount > 0 && upCount > 0 && lowCount > 0 && sigCount > 0) {
            score += 5;
        } else if (numCount > 0 && sigCount > 0 && (upCount > 0 || lowCount > 0)) {
            score += 3;
        } else if (numCount > 0 && (upCount > 0 || lowCount > 0)) {
            score += 2;
        }

        //评分
        if (score >= 90) {
            System.out.println("VERY_SECURE");
        } else if (score >= 80) {
            System.out.println("SECURE");
        } else if (score >= 70) {
            System.out.println("VERY_STRONG");
        } else if (score >= 60) {
            System.out.println("STRONG");
        } else if (score >= 50) {
            System.out.println("AVERAGE");
        } else if (score >= 25) {
            System.out.println("WEAK");
        } else {
            System.out.println("VERY_WEAK");
        }
    }
}

五、效果展示

1、输入

38$@NoNoN

2、输出

VERY_SECURE

3、说明

样例的密码长度大于等于8个字符,得25分;大小写字母都有所以得20分;有两个数字,所以得20分;包含大于1符号,所以得25分;由于该密码包含大小写字母、数字和符号,所以奖励部分得5分,经统计得该密码的密码强度为25+20+20+25+5=95分。

在这里插入图片描述


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

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

在这里插入图片描述

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

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

相关文章

电脑硬盘磁盘不小心被格式化了?如何一键恢复操作教程

Easyrecovery是一款功能齐全的数据恢复软件&#xff0c;恢复内容包括&#xff1a;硬盘数据恢复、手机数据恢复、U盘数据恢复、Mac数据恢复、恢复删除文件及高级数据恢复等。当用户发生数据丢失问题时&#xff0c;第一时间想到的就是使用数据恢复软件来恢复已经丢失的文件。在众…

【机器学习】集成学习解读(ensemble learning)

【机器学习】集成学习解读&#xff08;ensemble learning&#xff09; 文章目录 【机器学习】集成学习解读&#xff08;ensemble learning&#xff09;1. 集成学习(ensemble learning)1.1 前言1.2 什么是集成学习 2. 如何得到若干个个体学习器2.1 集成学习之 Bagging2.2 集成学…

《Netty》从零开始学netty源码(五十三)之PoolThreadCache的功能

allocateNormal 在前面分析PoolArena的分配内存的方法中&#xff0c;每次分配都是先从本地线程缓存中分配&#xff0c;本地线程缓存PoolThreadCache的分配方法如下&#xff1a; 分配过程主要有两步&#xff1a; 从PoolThreadCache的缓存数组中获取相应大小的缓存cache将需要…

手残也不该敲的命令

Linux命令是一种很有趣且有用的东西&#xff0c;但在你不知道会带来什么后果的时候&#xff0c;它又会显得非常危险。所以&#xff0c;在输入某些命令前&#xff0c;请多多检查再敲回车。 rm –rf rm –rf是删除文件夹和里面附带内容的一种最快捷的方法&#xff0c;但是细微的…

mybatis拦截器统一处理createBy、createTime、updateBy等字段

一、问题描述 createBy 、createTime、updateBy等字段是我们创建表的时候经常要用到的几个字段&#xff0c;但是我们不可能每一次在增删改查的时候都手动去修改或者添加这几个字段的属性值&#xff0c;我们可以在系统层面统一处理&#xff0c;如何实现呢&#xff1f; 二、实现…

轻松掌握KubeKey单节点和集群安装k8s和kubesphere

1、KubeKey单节点AllInOne装kubesphere及k8s 如果只想安装k8s&#xff0c;注意在命令里不指定kubesphere即可。 1、设置hostname hostnamectl set-hostname k8s-node05 2、准备KubeKey export KKZONEcncurl -sfL https://get-kk.kubesphere.io | VERSIONv1.1.1 sh -chmod …

Codeforces Round 867 (Div. 3) AK题解

目录 A. TubeTube Feed&#xff08;签到&#xff09; 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; B. Karina and Array&#xff08;签到&#xff09; 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; C. Bun Lover&#xff08;结论&#xff09; 题意&…

C++类和对象(5)

类和对象 1.流插入和流提取的运算符重载2.const成员3.取地址及const取地址操作符重载 1.流插入和流提取的运算符重载 通过函数重载&#xff0c;可以对流插入运算符和流提取运算符进行运算符重载。<<流插入在ostream中&#xff0c;>>流提取在istream中。 ① 流提取…

SpringCloud全面学习笔记之初窥门径篇

目录 前言Docker初见小鲸鱼Docker架构Docker的安装Docker基操Dockerfile自定义镜像Docker-ComposeDocker镜像仓库 异步通信初识MQ同步通讯异步通讯MQ常见框架 RabbitMQ快速入门RabbitMQ概述和安装常见消息模型快速入门 SpringAMQPBasic Queue 简单队列模型Work Queue 工作队列模…

ChatGPT - 高效编写Prompt

文章目录 概念prompt基本结构如何编写prompt指导组合使用将指令提示、角色提示和种子词提示技术结合使用&#xff1a;将标准提示、角色提示和种子词提示技术结合使用的示例&#xff1a; 资料 概念 prompt 是给预训练语言模型 的一个线索/提示&#xff0c;更好的理解 人类的问题…

深入剖析PyTorch和TensorFlow:理解二者的区别与联系

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

java基础入门-02-【面向对象】

Java基础入门-02-【面向对象】 8、面向对象8.1. 类和对象8.1.1 类和对象的理解8.1.2 类的定义8.1.3 对象的使用8.1.4 学生对象-练习 8.2. 对象内存图8.2.1 单个对象内存图8.2.2 多个对象内存图 8.3. 成员变量和局部变量8.3.1 成员变量和局部变量的区别 8.4. 封装8.4.1 封装思想…

JavaSE基础(四)—— 数组、内存分配

目录 一、数组的定义 1. 静态初始化数组 1.1 数组的访问 1.2 数组的几个注意事项 2. 动态初始化数组 2.1 动态初始化数组的元素默认值 3. 两种初始化的的使用场景总结、注意事项说明 二、数组的遍历 三、数组的案例 1. 数组元素求和 2. 数组求最值 3. 数组…

系统辨识——最小二乘法

基本原理 数学推导 最小二乘法是通过输入数据与输出数据来拟合已知结构的函数关系&#xff0c;也就是说已知二者的函数关系&#xff0c;通过最小二乘法估计函数的相关参数。假设 x , y x,y x,y存在以下函数关系&#xff1a; 但是在实际中&#xff0c;测量数据时存在测量误差或…

JavaScript call,callee,caller,apply,bind之间的区别

&#xff08;现实是此岸&#xff0c;梦想是彼岸&#xff0c;中间隔着湍急的河流&#xff0c;行动则是架在河上的桥梁。——克雷洛夫&#xff09; call call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。 MDN链接 call方法可以将一个对象属性作为…

ChatGPT AI使用成本

LLM “经济学”&#xff1a;ChatGPT 与开源模型&#xff0c;二者之间有哪些优劣权衡&#xff1f;谁的部署成本更低&#xff1f; 太长不看版&#xff1a;对于日均请求在 1000 次左右的低频使用场景&#xff0c;ChatGPT 的实现成本低于部署在 AWS 上的开源大模型。但面对每天数以…

Qt 从入门到入土

本文目录 1. Qt 概述1.1 什么是 Qt1.2 Qt 的发展史1.3 支持的平台1.4 Qt 的版本1.5 Qt 的优点1.6 成功案例 2. 创建 Qt 项目2.1 使用向导创建2.2 手动创建2.3 .pro文件2.4 一个最简单的 Qt 应用程序2.5 Qt 命名规范和常用快捷键 3. 第一个 Qt 小程序3.1 按钮的创建3.2 对象模型…

基于springboot的学生成绩管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

LeetCode第2题——两数相加(Java)

题目描述&#xff1a; ​ 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 ​ 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 ​ 你可以假设除了数字 0 之外…

考研数据结构--数组与广义表

数组与广义表 文章目录 数组与广义表数组数组的基本概念性质数组的存储结构一维数组的存储结构二维数组的存储结构 特殊矩阵的压缩存储对称矩阵上三角矩阵下三角矩阵对角矩阵 稀疏矩阵定义稀疏矩阵的三元组表示稀疏矩阵的存储结构及其基本运算算法定义存入三元组三元组元素赋值…