题目描述:
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超过2的子串重复
输入描述:一组或多组长度超过2的子符串。每组占一行
输出描述:如果符合要求输出:OK,否则输出NG
输入例子:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出例子:OK
NG
NG
OK
算法实现:
#include<iostream> #include<string>#include<vector>using namespace std; //************************************************ // * Author: 赵志乾 // * Date: 2017-2-20 // * Declaration: All Rigths Reserved !!! //***********************************************/ bool classnum(string& ret){ int f1=0,f2=0,f3=0,f4=0; for(int i=0;i<ret.length();i++) { if(ret[i]>='0'&&ret[i]<='9') f1=1; else if(ret[i]>='A'&&ret[i]<='Z') f2=1; else if(ret[i]>='a'&&ret[i]<='z') f3=1; else f4=1; } return f1+f2+f3+f4>=3;}bool checksubstr(string&ret){ for(int i=0;i+2<ret.length();i++) { for(int j=i+1;j+2<ret.length();j++) if(ret.substr(i,3)==ret.substr(j,3)) return false; } return true;}int main() { string str; while(getline(cin,str)) { if(str.length()<9) { cout<<"NG"<<endl; continue; } if(!classnum(str)) { cout<<"NG"<<endl; continue; } if(!checksubstr(str)) { cout<<"NG"<<endl; continue; } cout<<"OK"<<endl; } return 0; }
新闻热点
疑难解答
图片精选