题解 | #密码验证合格程序#
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
暴力法通过这道题目
用一个变量require来记录密码的三个要求
- s.size()来判断长度
- 通过for循环来判断密码种类,用一个空间大小为4的数组来记录满足的情况
- 判断重复元素有点难,使用了stl中的substr(pos,len),返回从pos位置开始长度为len的子串,对比即可
#include <bits/stdc++.h>
using namespace std;
void judgePassword(string s) {
int require = 0, flag = 0;
int countTypes[4] = {0};//小大写、数字、其它符号
// 判断长度
if(s.size() > 8) require++;
//判断种类数
for(int i = 0; i < s.size(); i++) {
//小写
if(s[i] >= 'a' && s[i] <= 'z') {
countTypes[0] = 1;
}
//大写
else if(s[i] >= 'A' && s[i] <= 'Z') {
countTypes[1] = 1;
}
//数字
else if(s[i] >= '0' && s[i] <= '9') {
countTypes[2] = 1;
}
//其它符号
else {
countTypes[3] = 1;
}
}
for(int j = 0; j < 4; j++) {
if(countTypes[j] == 1) flag++;
}
if(flag >= 3) require++;
//判断子串重复
int resubstr = 0;
for(int i = 0; i < s.size()-3; i++) {
for(int j = i+3; j<s.size()-3; j++) {
if(s.substr(i,3)==s.substr(j,3)) resubstr = 1;
if(resubstr != 0) break;
}
if(resubstr != 0) break;
}
if(resubstr == 0) require++;
//final
if(require == 3) cout<<"OK"<<endl;
else cout<<"NG"<<endl;
}
int main() {
string s;
while(getline(cin,s)) {
judgePassword(s);
}
return 0;
}