题意:
规则如下:
方法一:
直接模拟
思路:直接模拟。
循环遍历字符串,分别统计字母个数、数字个数、符号个数,和判断是否有大小写混合字母。然后,根据加分规则进行计算。最后,根据计算的值判断属于什么安全等级。
#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; }
时间复杂度:空间复杂度: