题解 | HJ87#密码强度等级#
密码强度等级
https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
// HJ87
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
char[] chars = str.toCharArray();
//长度评分
// 一、密码长度:
// 5 分: 小于等于4 个字符
// 10 分: 5 到7 字符
// 25 分: 大于等于8 个字符
int lengthMark;
if (chars.length <= 4) {
lengthMark = 5;
} else if (chars.length <= 7) {
lengthMark = 10;
} else {
lengthMark = 25;
}
// 二、字母:
// 0 分: 没有字母
// 10 分: 密码里的字母全都是小(大)写字母
// 20 分: 密码里的字母符合”大小写混合“
int lowerNum = 0;
int upperNum = 0;
for (int i = 0; i < chars.length; i++) {
if (65 <= chars[i] && chars[i] <= 90) {
upperNum++;
} else if (97 <= chars[i] && chars[i] <= 122) {
lowerNum++;
}
}
//判断字母评分
int CharacterMark;
int CharaSum = lowerNum + upperNum;
if (CharaSum == 0) {
CharacterMark = 0;
} else if (CharaSum == lowerNum || CharaSum == upperNum) {
CharacterMark = 10;
} else {
CharacterMark = 20;
}
//三、数字:
// 0 分: 没有数字
// 10 分: 1 个数字
// 20 分: 大于1 个数字
int Num = 0;
for (int i = 0; i < chars.length; i++) {
if (48 <= chars[i] && chars[i] <= 57) {
Num++;
}
}
//数字评分
int NumberMark;
if (Num == 0) {
NumberMark = 0;
} else if (Num == 1) {
NumberMark = 10;
} else {
NumberMark = 20;
}
// 四、符号:
// 0 分: 没有符号
// 10 分: 1 个符号
// 25 分: 大于1 个符号
int SignalNum = 0;
for (int i = 0; i < chars.length; i++) {
if (122 < chars[i] || chars[i] < 48 || (58 <= chars[i] && chars[i] <= 64)) {
SignalNum++;
}
}
//符号评分
int SignalMark;
if (SignalNum == 0) {
SignalMark = 0;
} else if (SignalNum == 1) {
SignalMark = 10;
} else {
SignalMark = 25;
}
// 五、奖励(只能选符合最多的那一种奖励):
// 2 分: 字母和数字
// 3 分: 字母、数字和符号
// 5 分: 大小写字母、数字和符号
int awardMark = 0;
if (lowerNum > 0 && upperNum > 0 && Num > 0 && SignalNum > 0) {
awardMark = 5;
} else if ((lowerNum > 0 && upperNum == 0 && Num > 0 && SignalNum > 0) ||
(upperNum > 0 && lowerNum == 0 && Num > 0 && SignalNum > 0)) {
awardMark = 3;
} else if (SignalNum == 0 && Num > 0 && CharaSum > 0) {
awardMark = 2;
}
//总分
int sum = lengthMark + NumberMark + CharacterMark + SignalMark + awardMark;
if (sum >= 90) {
// >= 90: 非常安全
System.out.println("VERY_SECURE");
} else if (sum >= 80) {
// >= 80: 安全(SECURE)
System.out.println("SECURE");
} else if (sum >= 70) {
// >= 70: 非常强( VERY_STRONG)
System.out.println("VERY_STRONG");
} else if (sum >= 60) {
// >= 60: 强(STRONG)
System.out.println("STRONG");
} else if (sum >= 50) {
//>= 50: 一般(AVERAGE)
System.out.println("AVERAGE");
} else if (sum >= 25) {
//>= 25: 弱(WEAK)
System.out.println("WEAK");
} else {
//>= 0: 非常弱(VERY_WEAK)
System.out.println("VERY_WEAK");
}
}
}
没什么难度 这个通过率不应该

