hdu2043密码
“你最可爱”,我说时来不及思索,而思索之后,还是这样说—— 普希金
题目链接: WXD.
这题主要是判断符合条件的总数是否大于3,还有密码长度的问题。首先至少要符合外面两个大条件,接下来至少符合三个小条件,总之还是得多关注细节问题,调试找bug,冲冲冲。
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
char str[51];
int M;
scanf("%d",&M);
getchar();
while (M--)
{
int cnt=0,flag1=0,flag2=0,flag3=0,flag4=0;
/*
flag做中间变量,判断输入的密码符合条件是否成立
若成立则给它赋值1,以免下次循环再执行if条件
*/
scanf("%s",str);
int len=strlen(str);
if(!(len>=8&&len<=16)) {
printf("NO\n");
continue; //不符合长度的跳过次循环
}
for (int i = 0; i < len; i++){
if(cnt<3) {
/*
strchr(str,'~')用于对字符串中的单个字符进行查找
返回字符 c 第一次在字符串 s 中出现的位置
*/
if((strchr(str,'~')||strchr(str,'!')||strchr(str,'@')||strchr(str,'#')||strchr(str,'%')||strchr(str,'$')||strchr(str,'^')) &&flag1==0) {
flag1=1;
//printf("!\n");
}
else if(str[i]>='0' && str[i]<='9' && flag2==0) {
flag2=1;
//printf("00\n");
}
else if(str[i]>='A'&&str[i]<='Z'&& flag3==0) {
flag3=1;
//printf("AA\n");
}
else if(str[i]>='a'&&str[i]<='z'&& flag4==0) {
flag4=1;
//printf("aa\n");
}
}
}
/*
安全密码要至少符合三个条件,则cnt至少为3输出YES
*/
cnt=flag1+flag2+flag3+flag4;
if(cnt>=3) printf("YES\n");
else printf("NO\n");
cnt=0;
}
return 0;
}
**好了,该洗洗睡了兄弟萌******