题意:
规则如下:
方法一:
直接模拟
思路:直接模拟。
循环遍历字符串,分别统计字母个数、数字个数、符号个数,和判断是否有大小写混合字母。然后,根据加分规则进行计算。最后,根据计算的值判断属于什么安全等级。
![]()
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin >> s){
int sum=0;
int n1=0,n2=0,n3=0;//字母个数、数字个数、符号个数
int len=s.size();
if(len<=4)//根据字符串长度计算
sum+=5;
else if(len<8)
sum+=10;
else
sum+=25;
int f1=0,f2=0;
int num=0;//判断是否有大小写混合字母
for(int i=0;i<len;i++){//统计字母个数、数字个数、符号个数
if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){//字母
n1++;
if(s[i]>='a'&&s[i]<='z'){
if(f1==0)
num++,f1=1;
}else{
if(f2==0)
num++,f2=1;
}
}else if(s[i]>='0'&&s[i]<='9')//数字
n2++;
else//符号
n3++;
}
if(n1>0){//根据字母个数计算
if(num==1)
sum+=10;
else if(num==2)
sum+=20;
}
if(n2==1)//根据数字个数计算
sum+=10;
else if(n2>1)
sum+=20;
if(n3==1)//根据符号个数计算
sum+=10;
else if(n3>1)
sum+=25;
if(num==2&&n1&&n2&&n3)//大小写字母、数字和符号
sum+=5;
else if(n1&&n2&&n3)//字母、数字和符号
sum+=3;
else if(n1&&n2)//字母和数字
sum+=2;
//评分
if(sum>=90)
cout << "VERY_SECURE\n";
else if(sum>=80)
cout << "SECURE\n";
else if(sum>=70)
cout << "VERY_STRONG\n";
else if(sum>=60)
cout << "STRONG\n";
else if(sum>=50)
cout << "AVERAGE\n";
else if(sum>=25)
cout << "WEAK\n";
else if(sum>=0)
cout << "VERY_WEAK\n";
}
return 0;
}
时间复杂度:
空间复杂度:![]()
方法二:
C++函数
思路:直接运用C++函数isalpha()、isdigit()判断字母和数字。其他也是参照方法一模拟。
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin >> s){
int sum=0;
int n1=0,n2=0,n3=0;//字母个数、数字个数、符号个数
int len=s.size();
if(len<=4)//根据字符串长度计算
sum+=5;
else if(len<8)
sum+=10;
else
sum+=25;
int f1=0,f2=0;
int num=0;//判断是否有大小写混合字母
for(int i=0;i<len;i++){//统计字母个数、数字个数、符号个数
if(isalpha(s[i])){//字母
n1++;
if(s[i]>='a'&&s[i]<='z'){
if(f1==0)
num++,f1=1;
}else{
if(f2==0)
num++,f2=1;
}
}else if(isdigit(s[i]))//数字
n2++;
else//符号
n3++;
}
if(n1>0){//根据字母个数计算
if(num==1)
sum+=10;
else if(num==2)
sum+=20;
}
if(n2==1)//根据数字个数计算
sum+=10;
else if(n2>1)
sum+=20;
if(n3==1)//根据符号个数计算
sum+=10;
else if(n3>1)
sum+=25;
if(num==2&&n1&&n2&&n3)//大小写字母、数字和符号
sum+=5;
else if(n1&&n2&&n3)//字母、数字和符号
sum+=3;
else if(n1&&n2)//字母和数字
sum+=2;
//评分
if(sum>=90)
cout << "VERY_SECURE\n";
else if(sum>=80)
cout << "SECURE\n";
else if(sum>=70)
cout << "VERY_STRONG\n";
else if(sum>=60)
cout << "STRONG\n";
else if(sum>=50)
cout << "AVERAGE\n";
else if(sum>=25)
cout << "WEAK\n";
else if(sum>=0)
cout << "VERY_WEAK\n";
}
return 0;
}
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号