OJ刷题之旅 (2)

简介: OJ刷题之旅 (2)

题目


网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。 首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件: (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 &lt; length; i++) {
    char c = password[i];
    if (c &gt;= 'A' &amp;&amp; c &lt;= 'Z') {
        has_uppercase = 1;
    } else if (c &gt;= 'a' &amp;&amp; c &lt;= 'z') {
        has_lowercase = 1;
    } else if (c &gt;= '0' &amp;&amp; c &lt;= '9') {
        has_digit = 1;
    } else {
        has_special = 1;
    }
}
group_count = has_uppercase + has_lowercase + has_digit + has_special;
return group_count &gt;= 3; // 如果密码中包含的字符组数量&gt;=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 函数进行判断,最后输出结果。

相关文章
|
5月前
|
Serverless
每日OJ刷题
每日OJ刷题
31 1
|
6月前
|
人工智能
刷题之Leetcode977题(超级详细)
刷题之Leetcode977题(超级详细)
22 0
|
6月前
|
算法
刷题之Leetcode59题(超级详细)
刷题之Leetcode59题(超级详细)
28 0
|
机器学习/深度学习 C语言
OJ刷题之旅(1)
OJ刷题之旅(1)
|
机器学习/深度学习
剑指Offer--LeetCode刷题篇
剑指Offer--LeetCode刷题篇
|
Java 测试技术 C语言
leetcode刷题(4)
各位朋友们,大家好。这两天我将为大家分享我在学习栈的过程中遇到的题目,我们一起来看看。
|
存储 算法
|
算法 Java C语言