# String Manipulation# Conditional Logic# Brute Force

a624 - 4. Password Analyzer

🔗 前往 ZeroJudge 原題

題目描述

題目要求撰寫一個程式,分析使用者輸入的密碼強度,並根據密碼是否符合長度、大小寫字母、以及字母與數字/符號的組合等條件,輸出密碼的強度等級:WEAK, ACCEPTABLE, GOOD, STRONG。

解題思路

程式首先讀取使用者輸入的密碼字串。然後,使用布林變數 Ab 分別記錄密碼中是否存在大寫字母和小寫字母。接著,檢查密碼長度是否大於等於 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";
	}
}

Discussion