使用Java解牛客网OR141密码检查
小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:
1. 密码只能由大写字母,小写字母,数字构成;
2. 密码不能以数字开头;
3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
4. 密码长度至少为8
现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。
输入描述:
输入一个数n,接下来有n(n≤100)行,每行一个字符串,表示一个密码,输入保证字符串中只出现大写字母,小写字母和数字,字符串长度不超过100。
输出描述:
输入n行,如果密码合法,输出YES,不合法输出NO
思路:
这道题目我觉得没什么套路,就是一个个检查是否符合要求就可以了
放代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();// 要判断的密码数量
String ss[] = new String[n];// 定义一个一位数组,并且申请空间
// System.out.println(n);
for (int i = 0; i < n; i++) {
ss[i] = cin.next();// 把密码存入到数组中
} // 1 bhgyyy
for (int i = 0; i < n; i++) {
int a = 0;// 定义一个变量
int b = 0;// 定义一个变量
int c = 0;// 定义一个变量
for (int j = 0; j < ss[i].length(); j++) {
if (ss[i].length() < 8)
break;// 密码长度不能小于8位
else if ((int) (char) (ss[i].charAt(j)) >= 0 && (int) (char) (ss[i].charAt(j)) <= 9)
break;// 密码不能以数字开头
else if ((int) (char) (ss[i].charAt(j)) >= 0 && (int) (char) (ss[i].charAt(j)) <= 9)
a = 1;// 如果这是数字就把a的值定义为1
else if ((int) (char) (ss[i].charAt(j)) >= 65 && (int) (char) (ss[i].charAt(j)) <= 90)
b = 1;// 如果这是大写字母就把b的值定义为1
else if ((int) (char) (ss[i].charAt(j)) >= 97 && (int) (char) (ss[i].charAt(j)) <= 122)
c = 1;// 如果这是小写字母就把c的值定义为1
else {// 如果这不是数字,不是大写字母也不是小写字母就结束循环
// 因为密码不规范所以把a,b,c的值定义为0;
a = 0;
b = 0;
c = 0;
break;
}
}
if ((a + b + c) >= 2)
System.out.println("YES");// (a+b+c)>=2表示密码符合要求
else
System.out.println("NO");
}
}
}
