蓝桥杯2023STEMA考试C++试卷(8月)第二题

题目:
网站提示,密码必须由8~16个字符组成,可以包含数字、大写字母、小写字母、特殊符号这4种字符类型。注:特殊符号只包含:!、@、#、S、%、^、&、*、(、)、_、+、-、=
以下是三种强度密码的设计规则:

  1. 包含4种不同类型字符的密码是强密码:
    2)包含2种或3种不同类型字符的密码是中等密码;
    3)只包含1种类型字符的密码是弱密码。
    输入描述:
    第一行输入一个正整数N(4<=N<=10),表示密码的个数接下来的N行,每行输入一个宁符串Si(8<=Si的长度<=16),表示一个密码,密码中可能包合数子、大写字母、小写字母、特殊符号这4种字符类型,且不含空格字符
    输出描述:
    共N行,每行输出一个整数Ri(Ri只能是0、1、2),依次表示对应密码si的强度
    如果si是强密码,则输出2:
    如果si是中等密码,则输出1;
    如果si是弱察码,则输出0。

解题思路:
1、利用题目中:不含空格字符的命题规则,采用cin的输入方式。至于为什么采用cin,cin的输入性质去理解一下。

	char a[17];
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a;
	} 

2、这里要主要我题目中输入完4个密码,才得出对应的数字强度。所以在输入通过我们不可以直接给出答案,要存储起来。
3、存储方式,作者采用4个数组方式进行存储。

    int n;//n负责输入  
	int a1[11]={0},a2[11]={0},a3[11]={0},a4[11]={0};//这里一定这样子初始化,否则会异常情况。
	char a[17];
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a;
		for(int j=0;a[j]!=0;j++)
		{
//每个密码当出现数字、大写、小写、其他字符时,是将对应的a[i]设为:1,这样子存在这个密码存在某一个类型了
			else if(a[j]>='a'&&a[j]<='z')
			if(a[j]>='0'&&a[j]<='9')
			a1[i]=1;
			a2[i]=1;
			else if(a[j]>='A'&&a[j]<='Z')
			a3[i]=1;
			else
			a4[i]=1;
		}	
	} 

4、完成存储类型后,最后只需要将每个位置的类型数值加起来则可以判断密码类型了

	for(int i=0;i<n;i++)
	{
	if(a1[i]+a2[i]+a3[i]+a4[i]==1)
	cout<<0<<endl;
	else if(a1[i]+a2[i]+a3[i]+a4[i]==2||a1[i]+a2[i]+a3[i]+a4[i]==3)
	cout<<1<<endl;
	else if(a1[i]+a2[i]+a3[i]+a4[i]==4)
	cout<<2<<endl;	
	}

5、完成代码如下:

#include
using namespace std;
int main()
{
	int n;//n负责输入  
	int a1[11]={0},a2[11]={0},a3[11]={0},a4[11]={0};
	char a[17];
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a;
		for(int j=0;a[j]!=0;j++)
		{
			if(a[j]>='0'&&a[j]<='9')
			a1[i]=1;
			else if(a[j]>='a'&&a[j]<='z')
			a2[i]=1;
			else if(a[j]>='A'&&a[j]<='Z')
			a3[i]=1;
			else
			a4[i]=1;
		}	
	} 
	for(int i=0;i<n;i++)
	{
	if(a1[i]+a2[i]+a3[i]+a4[i]==1)
	cout<<0<<endl;
	else if(a1[i]+a2[i]+a3[i]+a4[i]==2||a1[i]+a2[i]+a3[i]+a4[i]==3)
	cout<<1<<endl;
	else if(a1[i]+a2[i]+a3[i]+a4[i]==4)
	cout<<2<<endl;	
	}
}

点赞+收藏+关注~

你可能感兴趣的:(c++,蓝桥杯,算法)