刚開始看到这个题目的时候,就直接理解成仅仅要是长度符合要求而且字符符合要求,就是一个安全的password了,并没有考虑到至少要3种字符的组合。然后就直接写程序了(先暂且觉得题目就是那个意思),在測试的时候,发现竟然不符合我的要求(依照我的理解,password"Linle@ACM"是安全password,当然,依照题目的意思来理解,该password也是安全password),然后就一直找错误,找了半天都没发现错误,最后实在是没办法,就把脑袋当CPU来使吧,这下可好,发现原来是自己的逻辑出了错,就是在倒数第9行,我的意思是检查字符是否是数字和字母及特殊符号,假设不是的话,那么password就不安全了,否则就是安全的。为什么说逻辑出错了呢?就拿那个測试的数据来说吧,输入的password第一个字符是"L",那么那个isalnum函数返回的值是1,然后1不会等于0,所以第一个表达式的值为0,再然后就继续推断第二个表达式,显然"L"不是特殊字符,所以该表达式的值为假,所以整个表达的值为假,所以"Linele@ACM"是不安全的password,显然"L"是符合我们要求的。就算把第一个表达式的推断改为
isalum(S[i]) == 1也是没实用的,那么isalum返回的结果是1,因为是短路运算符,不再往后推断,然后1等于1,终于还是不安全的password,所以依照我的那个理解来写程序,这种算法是错误的,原因就是在推断的时候,还少了一些制约条件。关于依照我的那个理解应该怎么去写代码就不再说了,还是来看看题目真正的意思吧。

      题目已经说了,password仅仅包括那4种合法的字符,所以我们没有必要再去检查字符的正确性。我们要做的就2件事,即检查password的长度和password字符种类的个数,长度非常好检查,关键就在于计算password字符种类个数的计算。我的思路是,用4个推断语句来推断字符的种类,假设符合对应的字符,那么计数器就自增一次,可是同样种类的字符出现的次数可能不止一次,所以这个计数器在自增后,就应该关闭它的自增功能,所以我定义该类型为结构体类型,用4个变量来计数,并用构造函数来实现自己主动初始化,最后仅仅要推断password字符种类的个数是不是大于等于3就可以。

#include <iostream>
#include <ctype.h>
#include <string.h>
#define MAX 50+2
using namespace std;
struct zi_fu
{
int count;//计数器
bool ji_shu;//计数器的开关
zi_fu();//构造函数
};
zi_fu::zi_fu()
{
count = 0;
ji_shu = true;
}
int Is(char s)//推断是否是特殊字符
{
string p ="~!@#$%^";
for(int i=0; i<7; i++)
if(s == p[i])
return 1;
return 0;
}
int main(void)
{
int m;//測试数据的个数
cin>>m;
while(m--)
{
char s[MAX];
memset(s,0,sizeof(s));//初始化password
cin>>s;//输入password int len = strlen(s);
if( !(8 <= len && len < 16 ))//假设长度不符合要求
{
cout<<"NO"<<endl;
continue;
} zi_fu xiao,da,shu,fu;//存储字母和符号种类的个数
for(int i=0; i<len; i++)
{
if( islower(s[i]) && xiao.ji_shu )//小写
{
xiao.count++;
xiao.ji_shu = false;
}
else if( isupper(s[i]) && da.ji_shu )//大写
{
da.count++;
da.ji_shu = false;
}
else if( isdigit(s[i]) && shu.ji_shu )//数字
{
shu.count++;
shu.ji_shu = false;
}
else if( Is(s[i]) && fu.ji_shu )//符号
{
fu.count++;
fu.ji_shu = false;
}
}
if(xiao.count + da.count + shu.count + fu.count >= 3)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}

HDOJ 2043 password的更多相关文章

  1. hdoj 1226 超级password 【隐图BFS】

    称号:hdoj 1226 超级password 分析:这题属于隐式图搜索,状态不是非常明显,须要自己建立. 事实上搜索说白了就是暴力. 这个题目就是,首先对给出的能够组成的全部的数依次枚举.长度从小到 ...

  2. hdoj:2043

    #include <iostream> #include <string> using namespace std; bool judgeSize(string str) { ...

  3. 【HDOJ】3337 Guess the number

    神一样的题目.简言之,利用手段获得测试用例的第一行,输出结果.很显然利用wa, TLE, OLE等judge status可以获得测试用例.因此,果断Python写一个acm提交机器人.依赖lxml库 ...

  4. 打开程序总是会提示“Enter password to unlock your login keyring” ,如何成功关掉?

    p { margin-bottom: 0.1in; line-height: 120% } 一.一开始我是按照网友所说的 : rm -f ~/.gnome2/keyrings/login.keyrin ...

  5. your password has expired.to log in you must change it

    今天应用挂了,log提示密码过期.客户端连接不上. 打开mysql,执行sql语句提示密码过期 执行set password=new password('123456'); 提示成功,但客户端仍然连接 ...

  6. MySql Access denied for user 'root'@'localhost' (using password:YES) 解决方案

    关于昨天下午说的MySQL服务无法启动的问题,解决之后没有进入数据库,就直接关闭了电脑. 今早打开电脑,开始-运行 输入"mysql -uroot -pmyadmin"后出现以下错 ...

  7. [上架] iOS "app-specific password" 上架问题

    当你的 Apple ID 改用双重认证密码时,上架 iOS App 需要去建立一个专用密码来登入 Apple ID 才能上架. 如果使用 Application Loader 上传时,得到这个讯息: ...

  8. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

随机推荐

  1. CISP/CISA 每日一题 五

    CISA 每日一题(答) 信息系统审计师要确认系统变更程序中的: 1.变更需求应有授权.优先排序及跟踪机制: 2.日常工作手册中,明确指出紧急变更程序: 3.变更控制程序应同时为用户及项目开发组认可: ...

  2. ios 获取手机信息(UIDevice、NSBundle、NSLocale)

    iOS的SDK中提供了UIDevice.NSBundle,NSLocale. UIDevice        UIDevice提供了多种属性.类函数及状态通知,帮助我们全方位了解设备状况. 从检測电池 ...

  3. linux又一次编译安装gd,添加freetype支持,解决验证码不显示问题,Fatal error: Call to undefined function imagettftext()

    问题: Fatal error: Call to undefined function Think\imagettftext() in /var/www/webreg/ThinkPHP/Library ...

  4. 自定义HTML标签属性

    为HTML元素添加一自定义的属性非常方便,只须将其加到尖括号中即可,与内置属性地位相等. 如我们要为TextBox元素添加属性idvalue: <input type="text&qu ...

  5. RMAN DUPLICATE ADG DEMO

    RMAN DUPLICATE ADG DEMO 生产环境谨慎使用,建议生产环境采用RMAN备份恢复的方式. 本演示案例所用环境:   primary standby OS Hostname pry s ...

  6. ASP.NET Core 2.2 十九. 你扔过来个json,我怎么接

    原文:ASP.NET Core 2.2 十九. 你扔过来个json,我怎么接 前文说道了Action的激活,这里有个关键的操作就是Action参数的映射与模型绑定,这里即涉及到简单的string.in ...

  7. 在CentOS7 开发与部署 asp.net core app笔记

    原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...

  8. ds1302模块的一个arduino程序

    /* * 读写DS1302 时钟芯片 * @author Yangtf * 很棒的文档 http://www.21ic.com/jichuzhishi/datasheet/DS1302/data/18 ...

  9. 逻辑与和逻辑或:&& 、||

    逻辑或:首先看左边是真还是假(除了那5个都是真),如果为真,返回左边值,如果为假,返回右边的值 逻辑与:和逻辑或相同,先看左边的值是真是假,如果左边为真返回右边的值,左边为假返回左边的值 在两者同时出 ...

  10. (转)高强度密码管理软件KeePass使用详解

    转自:http://www.ruancan.com/ 算下来,你接触电脑有多久了?从第一次上网,到今天,你一共申请了多少个网站或者软件的帐号?相信这是一个几乎无人能够回答的问题. 无数人面临着这两个问 ...