华为OD机试 2024E卷题库疯狂收录中,刷题 <a rel="nofollow" href="https://blog.csdn.net/qq_40374604/category_12822407.html" style="color: red;">点这里</a>。
实战项目访问:http://javapub.net.cn/
专栏导读
本专栏收录于 《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》 。
刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
密码强度等级
密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度
- 5 分: 小于等于4 个字符
- 10 分: 5 到7 字符
- 25 分: 大于等于8 个字符
二、字母
- 0 分: 没有字母
- 10 分: 密码里的字母全都是小(大)写字母
- 20 分: 密码里的字母符合”大小写混合“
三、数字
- 0 分: 没有数字
- 10 分: 1 个数字
- 20 分: 大于1 个数字
四、符号
- 0 分: 没有符号
- 10 分: 1 个符号
- 25 分: 大于1 个符号
五、奖励(只能选符合最多的那一种奖励)
- 2 分: 字母和数字
- 3 分: 字母、数字和符号
- 5 分: 大小写字母、数字和符号
最后的评分标准
-
= 90: 非常安全
-
= 80: 安全(Secure)
-
= 70: 非常强
-
= 60: 强(Strong)
-
= 50: 一般(Average)
-
= 25: 弱(Weak)
-
= 0: 非常弱(Very_Weak)
对应输出为:
- VERY_SECURE
- SECURE
- VERY_STRONG
- STRONG
- AVERAGE
- WEAK
- VERY_WEAK
请根据输入的密码字符串,进行安全评定。
注
- 字母:a-z, A-Z
- 数字:0-9
- 符号包含如下:(ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
- !"#$%&'()*+,-./ (ASCII码:0x21~0x2F)
- :;<=>?@ (ASCII码:0x3A~0x40)
- [\]^_` (ASCII码:0x5B~0x60)
- {|}~ (ASCII码:0x7B~0x7E)
提示: 1 <= 字符串的长度<= 300
Java 编程
package cn.net.javapub.javaintroduction.example;
/**
* @author: shiyuwang
* @url: http://javapub.net.cn
*/
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = br.readLine()) != null) {
int score = letter(str);
if (score >= 90) {
System.out.println("VERY_SECURE");
} else if (90 > score && score >= 80) {
System.out.println("SECURE");
} else if (80 > score && score >= 70) {
System.out.println("VERY_STRONG");
} else if (70 > score && score >= 60) {
System.out.println("STRONG");
} else if (60 > score && score >= 50) {
System.out.println("AVERAGE");
} else if (50 > score && score >= 25) {
System.out.println("WEAK");
} else {
System.out.println("VERY_WEAK");
}
}
}
public static int letter(String pwd) {
char[] chars = pwd.toCharArray();
int countUp = 0;
int countLow = 0;
int countNum = 0;
int countSym = 0;
int score1 = 0;
int len = pwd.length();
if (len <= 4) {
score1 = 5;
} else if (len > 4 && len < 8) {
score1 = 10;
} else {
score1 = 25;
}
for (int i = 0; i < chars.length; i++) {
if (chars[i] >= 'a' && chars[i] <= 'z') {
countLow++;
} else if (chars[i] >= 'A' && chars[i] <= 'Z') {
countUp++;
} else if (chars[i] >= '0' && chars[i] <= '9') {
countNum++;
} else {
countSym++;
}
}
if (countUp == chars.length || countLow == chars.length) {
score1 += 10;
} else if (countUp > 0 && countUp < chars.length && countLow > 0 && countLow < chars.length) {
score1 += 20;
}
if (countNum == 1) {
score1 += 10;
} else if (countNum > 1) {
score1 += 20;
}
if (countSym == 1) {
score1 += 10;
} else if (countSym > 1) {
score1 += 25;
}
if (countSym != 0 && countNum != 0 && countLow != 0 && countUp != 0) {
score1 += 5;
} else if (countSym != 0 && countNum != 0 && (countLow != 0 || countUp != 0)) {
score1 += 3;
} else if (countSym == 0 && countNum != 0 && (countLow != 0 || countUp != 0)) {
score1 += 2;
}
return score1;
}
}
展示效果:
🏆下一篇: 华为OD机试 - 求最大连续bit数 (Java 2024 E卷 100分) 🏆本文收录于, 搬砖工逆袭Java架构师
刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
优质合集推荐
《突击面试》Java面试题合集
《面试1v1》
《编程工作总结》