---
# System prepended metadata

title: 密碼強度

---

# 密碼強度
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";
}
```