密码评估程序

题目描述

       很多时候我们都需要密码来保障自己的财产安全,而不同密码由于复杂程度不同,它被破译的可能性也不同,其密码强度也不一样。对于一串密码,其密码强度的规则如下:密码至少要有6位,且包含数字和字母,否则该密码无效;在有效密码中,若密码位数大于10位、大小写字母均有、含有特殊符号这三种条件均不满足,该密码强度为弱;满足这三种条件任意一个或者两个,则该密码强度为中;三种条件均满足,该密码强度为强。现给你一系列用户所设置的密码,要求你按规定评估出其密码强度。

输入格式

输入第一行为一个正整数T,表示接下来将有T个密码。

接下来T行,第i行首先是一个整数​,表示第i个密码的长度,接下来是一个长度为n的字符串,表示要评估的密码。保证密码为键盘上可以打出的符号且非空格。

输出格式

       输出应该有T行。

     第i行表示所评估的第i个密码的强度。若为无效密码,则输出”INVALID”;若强度为弱,输出”RUO”;强度为中,输出”ZHONG ”;强度为强,输出”QIANG”.

样例输入

4

6 123456

9 bityes123

9 BITyes123

11 BITyes123##

样例输出

INVALID

RUO

ZHONG

QIANG

数据范围

0<T≤1000,0<n≤20

# include<stdio.h>
# include<string.h>
/*对于一串密码,其密码强度的规则如下:密码至少要有6位,且包含数字和字母,
否则该密码无效;在有效密码中,若密码位数大于10位、大小写字母均有、含有特殊符号
这三种条件均不满足,该密码强度为弱;
满足这三种条件任意一个或者两个,则该密码强度为中;
三种条件均满足,该密码强度为强。
现给你一系列用户所设置的密码,要求你按规定评估出其密码强度。
输入格式:输入第一行为一个正整数T,表示接下来将有T个密码。
接下来T行,第i行首先是一个整数ni,表示第i个密码的长度,
接下来是一个长度为n的字符串,表示要评估的密码。保证密码为键盘上可以打出的符号且非空格。
输出格式
输出应该有T行。
第i行表示所评估的第i个密码的强度
若为无效密码,则输出”INVALID”;
若强度为弱,输出”RUO”;强度为中,输出”ZHONG ”;强度为强,输出”QIANG”.
样例输入
4
6 123456
9 bityes123
9 BITyes123
11 BITyes123##
样例输出
INVALID
RUO
ZHONG
QIANG
数据范围
0<T≤1000,0<n≤20
 */
int main()//本题条件较多,注意看清楚各种等级的要求!!! 
{
	int t, con1 , con2 , con31 , con32 , con3, con4;
	scanf("%d", &t);//密码行数	
	char key[t][21]; 
	int keylen[t];//每一行密码长度 
	
	for(int i = 0;i < t;i ++)//(学校)C90标准无法对可变数组初始化,只能遍历赋值0 
	{
		for(int j = 0;j < 21;j ++)
		{
			key[i][j] = 0;
		}
		keylen[i] = 0;
	}
	for (int i = 0;i < t;i ++)
	{
		scanf("%d", &keylen[i]);
		getchar();//去掉空格 
		gets(key[i]);//存一行密码 
	}
	
	for (int i = 0;i < t;i ++)
	{
		con1 = 0;//字符数量 
		con2 = 0;//特殊符号 
		con31 = 0;//大写 
		con32 = 0;//小写 
		con3 = 0;//有大小写 
		con4 = 0;//有数字 
		if (keylen[i] > 10)
		{
			con1 = 1;
		}
		else if(keylen[i] < 6)//密码长度小于6 
		{
			con1 = -1;
		}
		
		for (int j = 0;j < 21; j++)//判断特殊符号 
		{
			if((key[i][j] < 48 && key[i][j] > 32) || (key[i][j] > 57 && key[i][j] < 65) 
			   || (key[i][j] > 90 && key[i][j] < 97) || key[i][j] > 122)
			{
				con2 = 1;
				break;
			}
		}
		
		for (int j = 0;j < 21; j++)
		{
			if(key[i][j] > 64 && key[i][j] < 91)
			{
				con31 =1;
				break;
			}
		}
		
		for (int j = 0;j < 21; j++)
		{
			if(key[i][j] > 47 && key[i][j] < 58)
			{
				con4 =1;
				break;
			}
		}
		
		for (int j = 0;j < 21; j++)
		{
			if(key[i][j] > 96 && key[i][j] < 123)
			{
				con32 =1;
				break;
			}
		}
		con3 = con31 * con32;
		
		if (con1 < 0 || (con31 ==0 && con32 ==0) || con4 == 0)
		{
			printf("INVALID\n");
		}
		else//三个变量的和表示满足几个条件 
		{
			if(con1 + con2 + con3 == 3)
			{
				printf("QIANG\n");
			}	
			else if(con1 + con2 + con3 == 0)
			{
				printf("RUO\n");
			}
			else
			{	
				printf("ZHONG\n");
			}
		}
		
	}
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值