题目
网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。 首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件: (1).密码长度大于等于8,且不要超过16。 (2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。 这四个字符类别分别为: 1.大写字母:A,B,C...Z; 2.小写字母:a,b,c...z; 3.数字:0,1,2...9; 4.特殊符号:~,!,@,#,$,%,^; 给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入
输入数据第一行包含一个数M,接下来有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。
输出
对每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
样例
输入
3 a1b2c3d4 Linle@ACM
~@^@!%
输出
NO YES NO
来源/分类
字符串
题解
以下是一个可以判断密码是否安全的C语言程序:
#include <stdio.h> #include <string.h> // 判断密码是否安全的函数 int is_secure_password(char* password) { int length = strlen(password); if (length < 8 || length > 16) { // 如果密码长度不在8~16之间,直接返回0 return 0; } int group_count = 0; // 统计密码中包含哪几类字符组 int has_uppercase = 0, has_lowercase = 0, has_digit = 0, has_special = 0; for (int i = 0; i < length; i++) { char c = password[i]; if (c >= 'A' && c <= 'Z') { has_uppercase = 1; } else if (c >= 'a' && c <= 'z') { has_lowercase = 1; } else if (c >= '0' && c <= '9') { has_digit = 1; } else { has_special = 1; } } group_count = has_uppercase + has_lowercase + has_digit + has_special; return group_count >= 3; // 如果密码中包含的字符组数量>=3,返回1;否则返回0 } int main() { int m; scanf("%d", &m); while (m--) { char password[51]; scanf("%s", password); if (is_secure_password(password)) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
该程序先定义了一个函数 is_secure_password
,用于判断一个密码是否安全。在主函数中,先读入测试数据的数量,然后循环读入每个测试数据,并调用 is_secure_password
函数进行判断,最后输出结果。