a624 - 4. Password Analyzer
題目描述
題目要求撰寫一個程式,分析使用者輸入的密碼強度,並根據密碼是否符合長度、大小寫字母、以及字母與數字/符號的組合等條件,輸出密碼的強度等級:WEAK, ACCEPTABLE, GOOD, STRONG。
解題思路
程式首先讀取使用者輸入的密碼字串。然後,使用布林變數 A 和 b 分別記錄密碼中是否存在大寫字母和小寫字母。接著,檢查密碼長度是否大於等於 8,若符合則將答案 ans 加 1。然後,遍歷密碼字串,檢查是否存在大寫和小寫字母,若同時存在則 ans 加 1。最後,檢查密碼中是否存在字母和至少一個數字或符號,若符合則 ans 加 1。根據 ans 的值,輸出對應的密碼強度。
複雜度分析
- 時間複雜度: O(n),其中 n 是密碼的長度。程式需要遍歷密碼字串一次來檢查大小寫字母和數字/符號。
- 空間複雜度: O(1),程式使用的額外空間是固定的,不隨密碼長度變化。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
while(cin >> a){
int ans=0;
bool A=0;
bool b=0;
if(a.length()>=8)
ans++;
for(int i=0;i<a.length();i++){
if(a[i]<='z'&&a[i]>='a')
b=1;
else if(a[i]>='A'&&a[i]<='Z')
A=1;
}
if(b==1&&A==1)
ans++;
if(b==1||A==1){
for(int i=0;i<a.length();i++){
if(a[i]<'A'||(a[i]>'Z'&&a[i]<'a')||a[i]>'z'){
ans++;
break;
}
}
}
if(ans==3)
cout << "This password is STRONG\n";
else if(ans==2)
cout << "This password is GOOD\n";
else if(ans==1)
cout << "This password is ACCEPTABLE\n";
else
cout << "This password is WEAK\n";
}
}