hdoj 2043密码



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

(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
[email protected]
^~^@^@!%

Sample Output

NO
YES
NO

#include<stdio.h>

#include<string.h>

int main()

{

int N,n,i,a[10];

char s[100];

scanf("%d",&N);

getchar();

while(N--)

{

gets(s);

n=strlen(s);

memset(a,0,sizeof(a));//初始化数组啊A为0;

if(!(n>=8&&n<=16))

{

printf("NO\n");

continue;

}

for(i=0;i<n;i++)

{

if(s[i]>=‘A‘&&s[i]<=‘Z‘&&a[0]==0)//这里表示如果有密码A~Z则给a【0】赋1

a[0]=1;

if(s[i]>=‘a‘&&s[i]<=‘z‘&&a[1]==0)

a[1]=1;

if(s[i]>=‘0‘&&s[i]<=‘9‘&&a[2]==0)

a[2]=1;

if((s[i]==‘~‘||s[i]==‘!‘||s[i]==‘@‘||s[i]==‘#‘||s[i]==‘$‘||s[i]==‘%‘||s[i]==‘^‘)&&a[3]==0)

a[3]=1;

}

if((a[0]+a[1]+a[2]+a[3])>=3)

printf("YES\n");

else

printf("NO\n");

}
<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
int main()
{
    int N,n,i,a[10];
    char s[100];
    scanf("%d",&N);
    getchar();
    while(N--)
    {
         gets(s);
         n=strlen(s);
         memset(a,0,sizeof(a));//初始化数组啊A为0;
         if(!(n>=8&&n<=16))
         {
             printf("NO\n");
             continue;
         }
         for(i=0;i<n;i++)
         {
               if(s[i]>='A'&&s[i]<='Z'&&a[0]==0)//这里表示如果有密码A~Z则给a【0】赋1
               a[0]=1;
               if(s[i]>='a'&&s[i]<='z'&&a[1]==0)
               a[1]=1;
               if(s[i]>='0'&&s[i]<='9'&&a[2]==0)
               a[2]=1;
               if((s[i]=='~'||s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'||s[i]=='%'||s[i]=='^')&&a[3]==0)
               a[3]=1;
         }
         if((a[0]+a[1]+a[2]+a[3])>=3)
         printf("YES\n");
         else
         printf("NO\n");
    }
    return 0;
}
</span>

return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 06:50:48

hdoj 2043密码的相关文章

hdu 2043密码

密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29823    Accepted Submission(s): 11976 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以.首先,我们就要设置一个安全的密码.那什么样的密码才

HDU - 2043密码 水题

密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 54994    Accepted Submission(s): 22267 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以. 首先,我们就要设置一个安全的密码.那什么样的密码才

HDU 2043 密码(判断字符串存在性)

密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 45796    Accepted Submission(s): 18423 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以. 首先,我们就要设置一个安全的密码.那什么样的密码

HDOJ 2043 password

刚開始看到这个题目的时候,就直接理解成仅仅要是长度符合要求而且字符符合要求,就是一个安全的password了,并没有考虑到至少要3种字符的组合.然后就直接写程序了(先暂且觉得题目就是那个意思),在測试的时候,发现竟然不符合我的要求(依照我的理解,password"[email protected]"是安全password,当然,依照题目的意思来理解,该password也是安全password),然后就一直找错误,找了半天都没发现错误,最后实在是没办法,就把脑袋当CPU来使吧,这下可好,

密码 杭电 2043

网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以. 首先,我们就要设置一个安全的密码.那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件: (1).密码长度大于等于8,且不要超过16.(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组. 这四个字符类别分别为:1.大写字母:A,B,C...Z;2.小写字母:a,b,c...z;3.数字:0,1,2...9;4.特殊符号:~,!,@,#,$,%

hdoj 1226 超级密码 【隐式图BFS】

题目:hdoj 1226 超级密码 分析:这题属于隐式图搜索,状态不是很明显,需要自己建立. 其实搜索说白了就是暴力. 这个题目就是,首先对给出的可以组成的所有的数依次枚举,长度从小到大. 比如第一组样例,因为0不能出现在首位,那么我们枚举首位为1 和 7 看看漫步满足, 满足的话枚举第二位10 11 17 以及 70 71 77 顺便保存他们取余 n 之后的值,这样就可以剪枝,搜索过的就不用重复搜索了. 要求最早出现的BFS即可,第一个搜到的就是. 注意长度不大于500 AC代码: #incl

HDOJ 1226 超级密码(bfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226 思路分析:题目要求寻找一串长度不大于500的C进制的密码,且该密码需要为十进制数N的整数倍. <1>搜索方式选择:由于密码的长度未知(题目限制最大为500),所以状态树的深度比较深,采用dfs搜索效率比较低,选择bfs搜索更好. <2>剪枝方法:题目中对于每个状态需要采用模运算判断是否为N的整数倍: 由模运算的性质:设存在两个整数a和b,如果a%n==b%n,那么(a*x+c)%

hdoj:2043

#include <iostream> #include <string> using namespace std; bool judgeSize(string str) { int size = str.size(); if (size < 8 || size>16) return false; return true; } int isA(string str) { for (auto &c : str) { if (c >= 'A' &&am

ACM--26进制加法--HDOJ 2100--Lovekey--大数--字符串处理

HDOJ题目地址:传送门 Lovekey Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7783    Accepted Submission(s): 2519 Problem Description XYZ-26进制数是一个每位都是大写字母的数字. A.B.C.-.X.Y.Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26