华为OJ——密码验证合格程序
2016-06-07 14:49
399 查看
密码验证合格程序
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
[b]输入描述:[/b]
一组或多组长度超过2的子符串。每组占一行
[b]输出描述:[/b]
如果符合要求输出:OK,否则输出NG
[b]输入例子:[/b]
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
[b]输出例子:[/b]
OK
NG
NG
OK
解答代码:
#include<iostream>
#include<vector>
#include<iostream>
#include<string>
#include<set>
#include<sstream>
#include<algorithm>
using namespace std;
//判断是否存在长度大于2的子串
int judgeSubStr(string str)
{
int i,j;
string subStr1="";
string subStr2="";
for(i=0; i<str.length()-3; i++)
{
subStr1=str.substr(i,3);
for(j=i+3; j<str.length()-2; j++)
{
subStr2=str.substr(j,3);
if(subStr1==subStr2)
{
return 1;
}
}
}
return 0;
}
int main()
{
string s1;
int i,j,k;
int count=0;
set<char> letterSmall;//存储小写字母
set<char> letterBig;//存储大写字母
set<char> number;//存储数字
set<char> other;//存储其他字符
while(cin>>s1)
{
//先清空容器
letterSmall.clear();
letterBig.clear();
number.clear();
other.clear();
if(s1.length()<=8)
{
//cout<<"length"<<endl;
cout<<"NG"<<endl;
continue;
}
if(judgeSubStr(s1))
{
//cout<<"sub"<<endl;
cout<<"NG"<<endl;
continue;
}
for(i=0; i<s1.length(); i++)
{
if(s1[i]>='a'&&s1[i]<='z')
letterSmall.insert(s1[i]);
else if(s1[i]>='A'&&s1[i]<='Z')
letterBig.insert(s1[i]);
else if(s1[i]>='0'&&s1[i]<='9')
number.insert(s1[i]);
else
other.insert(s1[i]);
}
int count=0;
if(letterSmall.size()>0)//说明存在小写字母
count++;
if(letterBig.size()>0)//说明存在大写字母
count++;
if(number.size()>0)//说明存在数字
count++;
if(other.size()>0)//说明含有其他字符
count++;
//cout<<letterSmall.size()<<letterBig.size()<<number.size()<<other.size()<<endl;
if(count>=3)
{
cout<<"OK"<<endl;
}
else
{
cout<<"NG"<<endl;
}
}
}
题目描述
密码要求:1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
[b]输入描述:[/b]
一组或多组长度超过2的子符串。每组占一行
[b]输出描述:[/b]
如果符合要求输出:OK,否则输出NG
[b]输入例子:[/b]
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
[b]输出例子:[/b]
OK
NG
NG
OK
解答代码:
#include<iostream>
#include<vector>
#include<iostream>
#include<string>
#include<set>
#include<sstream>
#include<algorithm>
using namespace std;
//判断是否存在长度大于2的子串
int judgeSubStr(string str)
{
int i,j;
string subStr1="";
string subStr2="";
for(i=0; i<str.length()-3; i++)
{
subStr1=str.substr(i,3);
for(j=i+3; j<str.length()-2; j++)
{
subStr2=str.substr(j,3);
if(subStr1==subStr2)
{
return 1;
}
}
}
return 0;
}
int main()
{
string s1;
int i,j,k;
int count=0;
set<char> letterSmall;//存储小写字母
set<char> letterBig;//存储大写字母
set<char> number;//存储数字
set<char> other;//存储其他字符
while(cin>>s1)
{
//先清空容器
letterSmall.clear();
letterBig.clear();
number.clear();
other.clear();
if(s1.length()<=8)
{
//cout<<"length"<<endl;
cout<<"NG"<<endl;
continue;
}
if(judgeSubStr(s1))
{
//cout<<"sub"<<endl;
cout<<"NG"<<endl;
continue;
}
for(i=0; i<s1.length(); i++)
{
if(s1[i]>='a'&&s1[i]<='z')
letterSmall.insert(s1[i]);
else if(s1[i]>='A'&&s1[i]<='Z')
letterBig.insert(s1[i]);
else if(s1[i]>='0'&&s1[i]<='9')
number.insert(s1[i]);
else
other.insert(s1[i]);
}
int count=0;
if(letterSmall.size()>0)//说明存在小写字母
count++;
if(letterBig.size()>0)//说明存在大写字母
count++;
if(number.size()>0)//说明存在数字
count++;
if(other.size()>0)//说明含有其他字符
count++;
//cout<<letterSmall.size()<<letterBig.size()<<number.size()<<other.size()<<endl;
if(count>=3)
{
cout<<"OK"<<endl;
}
else
{
cout<<"NG"<<endl;
}
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- 华为路由器密码恢复
- 华为交换机的后缀详解
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始