刚開始看到这个题目的时候,就直接理解成仅仅要是长度符合要求而且字符符合要求,就是一个安全的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. mobx项目创建 + mobx项目流程代码

    一. 安装mobx 1. react 安装并 reject抽离配置 1. 全局安装 create-react-app 这个脚手架 npm/cnpm i create-react-app -g yarn ...

  2. 洛谷——P1443 马的遍历

    https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达 ...

  3. POJ——T2271 Guardian of Decency

    http://poj.org/problem?id=2771 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5932   A ...

  4. 想知道WiFi是什么样子的么?

    据英国<每日邮报>报道.英国纽卡斯尔大学博士生路易斯·赫南日前利用定制的仪器为WiFi信号拍照,绘制出一系列展现人类周围无形网络WiFi连接情况的图,这些盘旋环绕的明亮光束,宛如幽灵一般缠 ...

  5. Redis原理(二)

    运维 快照使用子进程是通过一个子进程完成, 它会比较的浪费资源的操作. 1.遍历整个内存,会增加系统负担. 2.io操作,降低redis性能. 一般都是主备,备用的进行持久化. Redis 4.0混合 ...

  6. ADO.net简单增删改查

    嘿嘿,又到了总结了的时间,今天我们学习了ADO.net,什么是ADO.NET:ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类操作文件一样, Sys ...

  7. Spider_basic

    网络爬虫 定义:网络蜘蛛.网络机器人,抓取网络数据的程序 总结:用Python程序去模仿人去访问网站,模仿的越逼真越好 目的:通过有效的大量数据分析市场走势.公司决策 企业获取数据的方式 公司自有数据 ...

  8. 原生js大总结十

    91.ajax的优点     a.提高运行效率   b.提高用户体验,让多件事情同时发生   c.在不刷新页面的情况下可以对局部数据进行加载和刷新       92.ajax请求的流程   1.创建通 ...

  9. 【Codeforces Round #446 (Div. 2) A】Greed

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 贪心选容量大的瓶子就好 [代码] #include <bits/stdc++.h> #define int long l ...

  10. 微信支付v2开发(5) 订单查询

    本文介绍微信支付中订单查询功能的实现. 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/wxpay-order-query.html 一.订单查询 因为某一方 ...