水题--点击查看原题
通过f1,f2,f3,f4来记录是否包含了哪种类型,
fall为这四个数的和
如果fall大于或等于3,就说明“字符类别”中四组中至少有三组
#include<iostream>
#include<cstring>
using namespace std;
int main() {
int m,f1,f2,f3,f4,fall;
bool istrue;
char s[50];
cin>>m;
getchar();
while(m--) {
f1=f2=f3=f4=0;
gets(s);
if(strlen(s)<8 ||strlen(s)>16) {
cout<<"NO"<<endl;
continue;
}
istrue=1;
for(int i=0; i<strlen(s); i++) {
if(s[i]>='A' && s[i]<='Z') {
if(!f1)f1=1;
} else if(s[i]>='a' && s[i]<='z') {
if(!f2)f2=1;
} else if(s[i]>='0' && s[i]<='9') {
if(!f3)f3=1;
} else if(s[i]=='~' ||s[i]=='!' ||s[i]=='@' ||s[i]=='#' ||s[i]=='$' ||s[i]=='%' ||s[i]=='^') {
if(!f4)f4=1;
} else {
istrue=0;
break;
}
}
fall=f1+f2+f3+f4;
if(istrue && fall>=3) {
cout<<"YES"<<endl;
}else cout<<"NO"<<endl;
}
return 0;
}