Q - 密码.

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

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

    (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
#include<stdio.h>
#include<string.h>
int main()
{
	char str[100];
	int m,i;
	scanf("%d",&m);
	while(m--)
	{
		int sign1=0;
		int sign2=0;
		int sign3=0;
		int sign4=0;
		int num=0;
		scanf("%s",&str);
		num=strlen(str);
		if(num>=8&&num<=16)
		{
		for(i=0;i<num;i++)
		{		
			if(str[i]>='A'&&str[i]<='Z')
			{
				sign1++;
			}
			if(str[i]>='a'&&str[i]<='z')
			{
				sign2++;
			}
			if(str[i]>='0'&&str[i]<='9')
			{
				sign3++;
			}
			if(str[i]=='!'||str[i]=='~'||str[i]=='@'||str[i]=='$'||str[i]=='%'||str[i]=='^')
			{
				sign4++;
			}	
		}
		if(sign1>=1&&sign2>=1&&sign3>=1&&sign4==0||sign1>=1&&sign2>=1&&sign3>=1&&sign4>=1||sign1>=1&&sign2>=1&&sign3==0&&sign4>=1||sign1>=1&&sign2==0&&sign3>=1&&sign4>=1||sign1==0&&sign2>=1&&sign3>=1&&sign4>=1)
		printf("YES\n");
		else
		printf("NO\n");
			
		}
		else
		printf("NO\n");

		}	
	
	
	return 0;
}

这里我在做这道题的时候没仔细审题以为要4个条件都满足

后来仔细重新看才发现是3个以上就行

这个故事告诉我们做题一定要好好审题

最后附上答案


#include <ctype.h>
#include <stdio.h>

int main(void)
{
    int n, a[6];
    char c;

    scanf("%d%*c", &n);
    while (n--)
    {
        a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = 0;
        while ((c = getchar()) != '\n')
        {
            if (isupper(c))
                a[0] = a[5]++;
            else if (islower(c))
                a[1] = a[5]++;
            else if (isdigit(c))
                a[2] = a[5]++;
            else
                a[3] = a[5]++;
        }
        if (a[0]) a[4]++;
        if (a[1]) a[4]++;
        if (a[2]) a[4]++;
        if (a[3]) a[4]++;
        puts(a[4] > 2 && a[5] > 7 && a[5] <17 ? "YES" : "NO");
    }

    return 0;
}