HDU 2043 密码 Java --加解密

深入理解数据库原理
以实战为基础,以数据库原理为基础,结合实战,深入理解数据库原理。
wangxiaoming

密码

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 28774    Accepted Submission(s): 11495


Problem Description

网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任务就是判断它是不是一个安全的密码。
 

Input
输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。
 

Output
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
 

Sample Input
3 a1b2c3d4 Linle@ACM ^~^@^@!%
 

Sample Output
NO YES NO
 

Author
linle
 


题目大意很明了: 就是说 大于等于8 < 16 的密码 好密码 其次需要含有四类字符中的至少三种 
解题思路:  肯定会想: 字符串长度 首先判断一下 如果用java 写 用哪个函数 ? length()  输入字符串用 什么呢Sacnner 其次
                     其次会想字符串匹配 用什么呢 要么循环 ,要么用java里面的函数      
                       再其次肯定会想怎样判断至少三个 最笨的办法就是一个一个列出来 聪明一点的办法是 计数求和 再java中也可以

下面是解题代码: 已经AC
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int main()
{
    //表示M次输入
    int m;
    scanf("%d", &m);
    char psw[50];
    int f1, f2 , f3,  f4;
    while(m--)
    {
         scanf("%s", psw);
         int l = strlen(psw);
         if(l < 8 || l > 16)
         {
             cout<<"NO"<<endl;
             continue;
         }
         f1 = f2 = f3 = f4 = 0 ;
         for(int i = 0; i < l; i++)
         {
             if(psw[i] >='A' && psw[i] <= 'Z')
             {//如果有这个存在
                 f1 = 1;
             }
             if(psw[i] >='a' && psw[i] <= 'z')
             {
                 f2 = 1;
             }
             if(psw[i] >= '0' && psw[i] <= '9')
             {
                 f3 = 1;
             }
            if(psw[i] == '~' || psw[i] == '@' || psw[i] == '#' || psw[i] == '$' || psw[i] == '%' || psw[i] == '^')
            {
                 f4 = 1;
            }
         }
         if(f1 + f2 + f3 + f4 > 2)
         {
               cout<<"YES"<<endl;
         }
         else
         {
             cout<<"NO"<<endl;
         }
    }

    return  0;
}

下面还有一种java写的代码:
<pre name="code" class="java">import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class hdu2043 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//题目目的比较简单
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();
		sc.nextLine();  //读取下一行
		while(m--!= 0)
		{
			String s = sc.nextLine();
			if(s.length()<8 || s.length()>16)
			{
				System.out.println("NO");
				continue;
			}
			int count = 0;
			if(Pattern.compile("[A-Z]").matcher(s).find())
			{
				count++;
			}
			if(Pattern.compile("[a-z]").matcher(s).find())
			{//这里有空格也是不行的
				count++;
			}
			if(Pattern.compile("[0-9]").matcher(s).find())
			{//0-9 不要写成 0 - 9 有空格是不行的
				count++;
			}
			if(Pattern.compile("[~!@#$%^]").matcher(s).find())
			{
				count++;
			}
			System.out.println(count >2 ? "Yes":"NO");
		}

	}

}


wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值