import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String password = in.nextLine(); boolean hasUpper = false; boolean hasLower = false; int digitCount = 0; int symbolCount = 0; for (char c : password.toCharArray()) { if (c >= 'a' && c <= 'z') { hasLower = true; } else if (c >= 'A' && c <= 'Z') { hasUpper = true; } else if (Character.isDigit(c)) { digitCount++; } else { int code = (int) c; if ((code >= 0x21 && code <= 0x2F) || (code >= 0x3A && code <= 0x40) || (code >= 0x5B && code <= 0x60) || (code >= 0x7B && code <= 0x7E)) { symbolCount++; } } } int lengthScore = password.length() <= 4 ? 5 : (password.length() <= 7 ? 10 : 25); int letterScore = 0; boolean hasLetter = hasUpper || hasLower; if (hasLetter) { letterScore = (hasUpper && hasLower) ? 20 : 10; } int digitScore = digitCount == 0 ? 0 : (digitCount == 1 ? 10 : 20); int symbolScore = symbolCount == 0 ? 0 : (symbolCount == 1 ? 10 : 25); int bonus = 0; if (hasUpper && hasLower && digitCount >= 1 && symbolCount >= 1) { bonus = 5; } else if (hasLetter && digitCount >= 1 && symbolCount >= 1) { bonus = 3; } else if (hasLetter && digitCount >= 1) { bonus = 2; } int total = lengthScore + letterScore + digitScore + symbolScore + bonus; String level; if (total >= 90) { level = "VERY_SECURE"; } else if (total >= 80) { level = "SECURE"; } else if (total >= 70) { level = "VERY_STRONG"; } else if (total >= 60) { level = "STRONG"; } else if (total >= 50) { level = "AVERAGE"; } else if (total >= 25) { level = "WEAK"; } else { level = "VERY_WEAK"; } System.out.println(level); } }
https://www.nowcoder.com/discuss/727521113110073344
思路:
- 输入处理:使用 Scanner 读取输入的密码字符串。
- 变量初始化:初始化变量来跟踪密码中的大写字母、小写字母、数字和符号的数量。
- 遍历字符:遍历密码中的每个字符,并根据字符类型更新相应的变量。
- 计算各部分得分:根据规则分别计算长度、字母、数字、符号的得分。
- 计算奖励得分:根据密码中是否包含大小写字母、数字和符号的组合来计算奖励得分。
- 总分和等级判定:将各部分得分相加,根据总分确定密码的安全等级并输出结果。