题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <iostream> #include<vector> using namespace std; int isOk(char c){ if(c>='0'&&c<='9'){ //cout<<c<<" : "<<0<<" "; return 0; } if((c>='!'&&c<='\\')||(c>=':'&&c<='@')||(c>='['&&c<=96)||(c>='{'&&c<='~')){ //cout<<c<<" : "<<1<<" "; return 1; } if(c>='A'&&c<='Z'){ //cout<<c<<" : "<<2<<" "; return 2; } if(c>='a'&&c<='z'){ //cout<<c<<" : "<<3<<" "; return 3; } //cout<<c<<" : "<<4<<" "; return 4; } vector<int> findPos(string str,const char c){ vector<int> vint; for(int i=0;i<str.length();i++){ int pos=-1; pos=str.substr(i).find_first_of(c); //cout<<"pos: "<<pos<<endl; if(pos!=-1){ vint.push_back(pos+i); //cout<<c<<" : "<<pos+i<<endl; i=pos+i; } } return vint; } int main() { string str; while(getline(cin, str)){ int pd[5]={0,0,0,0,0}; bool beNG=false; if(str.length()>8&&str.length()<=100){ for(int i=0;i<str.length();i++){ pd[isOk(str[i])]=1; } //cout<<str<<endl; //cout<<pd[0]<<" "<<pd[1]<<" "<<pd[2]<<" "<<pd[3]<<" "<<pd[4]<<endl; int Vpd=pd[0]+pd[1]+pd[2]+pd[3]; if((Vpd>=3&&pd[4]==0)){ for(int i=0;i<str.length();i++){ vector<int> vint; vint = findPos(str, str[i]); if(vint.size()>1){ for(int j=0;j<vint.size();j++){ for(int m=j+1;m<vint.size();m++){ //cout<<str[vint[j]]<<" : "<<(str.length()>vint[j]+1)<<" "<<(str.length()>vint[j+1]+1)<<" "<<(str.length()>vint[j]+2)<<" "<<(str.length()>vint[j+1]+2)<<endl; if((str.length()>vint[j]+1)&&(str.length()>vint[j]+2)&&(str.length()>vint[m]+1)&&(str.length()>vint[m]+2)){ //cout<<str[vint[j]]<<" "<<str[vint[j]+1]<<" "<<str[vint[j]+2]<<endl; //cout<<str[vint[m]]<<" "<<str[vint[m]+1]<<" "<<str[vint[m]+2]<<endl; //cout<<"-------"<<endl; if((str[vint[j]+1]==str[vint[m]+1])&&(str[vint[j]+2]==str[vint[m]+2])){ cout<<"NG"<<endl; beNG=true; break; } } } if(beNG) break; } if(beNG) break; } } }else{ beNG=true; cout<<"NG"<<endl; } }else{ beNG=true; cout<<"NG"<<endl; } if(!beNG){ cout<<"OK"<<endl; } } return 0; } // 64 位输出请用 printf("%lld")