这道题理解了好久,因为对位运算不熟悉
#include<cstdio>
#include<cctype>
char s[55];
int main(){
int n,i,flag=0;
scanf("%d",&n);
while(n--){
scanf("%s",s);
for(i=flag=0;s[i];i++)
if(isupper(s[i])) flag|=1;
else if(islower(s[i])) flag|=2;
else if(isdigit(s[i])) flag|=4;
else flag|=8;
if(59520&1<<flag&&i>7&&i<17)
puts("YES");
else puts("NO");
}
return 0;
}
优先级:~(按位取反) 算术运算符 移位运算符(<<,>>) 关系运算符 &(按位与) ^(按位异或) |(按位或)