1943: 密码判断

城市黎明的灯火,总有光环在陨落,模仿者一个又一个,无人问津的角色,你选择去崇拜谁呢,怨恨谁呢?

 

题目描述

密码被盗是常有的事,要防止密码被盗,就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码应该至少满足下面两个条件: 
(1). 密码长度大于等于8; 
(2). 密码中的字符应该包括下面四类字符中的至少三种:
① 大写字母:A,B,C...Z; 
② 小写字母:a,b,c...z; 
③ 数字:0,1,2...9; 
④ 特殊符号:~,!,@,#,$,%,^; 
给你一个密码,你的任务就是判断它是不是一个安全的密码。

 

输入

第一行为一个整数M,接下有M行,每行为一个密码串(长度小于20),密码串中仅包含上面的四类字符。

 

输出

判断每个密码是不是一个安全的密码,是的话输出YES,否则输出NO

 

样例输入

复制样例数据

3
happy1999
Hello@UPC
AB$%8ok

样例输出

NO
YES
NO
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
char s[100];
int ct[5],jg,M,fg;
int main()
{
    scanf("%d",&M);
        getchar();
    while(M--)
    {
        fg=0,jg=0;
        memset(ct,0,sizeof(ct));
        scanf("%s",s);
//        cout<<s<<endl;
        int cd=strlen(s);
        if(cd<8)
            cout<<"NO"<<endl;
        else
        {
            for(int i=0; i<cd; i++)
            {
                if(s[i]>='A'&&s[i]<='Z')
                    fg=1;
                else if(s[i]>='a'&&s[i]<='z')
                    fg=2;
                else if(s[i]>='0'&&s[i]<='9')
                    fg=3;
                else// if(s[i]=='~'||s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'||s[i]=='%'||s[i]=='^')
                    fg=4;
                ct[fg]++;
            }
            for(int i=1; i<=4; i++)
            {
                if(ct[i]!=0)
                    jg++;
            }
            if(jg>=3)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
    }
    return 0;
}

一道被坑了几遍的题,错误点在数据类型上,不能定义为string类型,可能是编译环境的问题,反正在石油大学是通不过,可能其他地方能通过,俺也不知道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值