# 密碼強度 https://neoj.sprout.tw/problem/592/ ### 題目敘述 小明想出了很多組密碼,但不知道使用哪一個,因此定義了一套計算密碼強度的方式: 假設密碼只包含數字、英文字母大寫、英文字母小寫,接著將字元與前一字元的關係分成三類 1. 完全相同 1. 相異,但屬於相同類型(同為數字、同為英文字母大寫、或同為英文字母小寫) 1. 類型相異 若為類型1,密碼強度不變;若為類型2,密碼強度+1;若為類型3,密碼強度+2,若只有一個字元或沒有字元,密碼強度為0。 ### 輸入說明 第一行輸入一個正整數$N,N≤50$,代表小明想出了幾組密碼,第2到$N+1$行輸入字串$S$代表密碼,保證$2≤S$的長度$≤200$,而且$S$只由數字及英文字母大小寫組成 ### 輸出說明 輸出密碼強度最高的密碼,若強度相同,則輸出最早出現的一組(要換行) ### 範例輸入 ``` 3 password PAssWOrd pa12w0rD ``` ### 範例輸出 ``` pa12w0rD ``` # Code ```cpp #include <iostream> #include <string.h> #include <cmath> #include <algorithm> using namespace std; int main(){ int n, S = 0, s[55]; char in[55][205]; cin >> n; for (int t = 0; t < n; t++) cin >> in[t]; for (int t = 0; t < n; t++) { int x = strlen(in[t]); if (in[t][1] == '\0' || in[t][0] == '\0') continue; for (int k=1 ; k<x ; k++) { if (in[t][k] != in[t][k - 1]) s[t]++; if (isupper(in[t][k]) != 0 && isupper(in[t][k - 1]) != 0) continue; if (islower(in[t][k]) != 0 && islower(in[t][k - 1]) != 0) continue; if (isdigit(in[t][k]) != 0 && isdigit(in[t][k - 1]) != 0) continue; s[t]++; } } for (int r = 0; r < n; r++) { if (s[S] < max(s[S], s[r])) S = r; } int x = strlen(in[S]); for (int t = 0; t < x; t++) cout << in[S][t]; cout << "\n"; } ```