QQ帐户的申请与登陆
QQ帐户的申请与登陆
实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。
输入格式:
输入首先给出一个正整数N(≤10^5,随后给出N行指令。每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户登陆,后面是登陆信息。QQ号码为一个不超过10位、但大于1000(据说QQ老总的号码是1001)的整数。密码为不小于6位、不超过16位、且不包含空格的字符串。
输出格式:
针对每条指令,给出相应的信息:
1)若新申请帐户成功,则输出“New: OK”;
2)若新申请的号码已经存在,则输出“ERROR: Exist”;
3)若老帐户登陆成功,则输出“Login: OK”;
4)若老帐户QQ号码不存在,则输出“ERROR: Not Exist”;
5)若老帐户密码错误,则输出“ERROR: Wrong PW”。
输入样例:
5
L 1234567890 myQQ@qq.com
N 1234567890 myQQ@qq.com
N 1234567890 myQQ@qq.com
L 1234567890 myQQ@qq
L 1234567890 myQQ@qq.com
输出样例:
ERROR: Not Exist
New: OK
ERROR: Exist
ERROR: Wrong PW
Login: OK
代码如下(非散列)
#include<iostream>
#include<map>
#include<vector>
using namespace std;
int main(){
map<string,int> qq; // 储存qq密码在vector里的位置
vector<string> vi(1); // 储存qq密码
string num,password;
char state;
int N,tag=1; cin>>N;
while(N--){
cin>>state>>num>>password;
if(state=='L'){
if(qq[num]==0) printf("ERROR: Not Exist\n");
else if(vi[qq[num]]==password)
printf("Login: OK\n");
else
printf("ERROR: Wrong PW\n");
}
else{
if(qq[num]!=0)
printf("ERROR: Exist\n");
else{
qq[num]=tag++;
vi.push_back(password);
printf("New: OK\n");
}
}
}
return 0;
}
代码如下(散列)
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
char state;
typedef struct node* list;
struct node{
char qq[11];
char password[17];
list next;
};
typedef struct hashtable* hashtbl;
struct hashtable{
int tblsize;
list heads;
};
int nextprime(int N){
N=N%2?N+2:N+1;
int i;
while(1){
for(i=sqrt(N);i>2;i--)
if(!(N%i)) break;
if(i==2) break;
else N=N+2;
}
return N;
}
hashtbl createtbl(int N){
hashtbl h=new hashtable();
h->tblsize=nextprime(N);
h->heads=new node[h->tblsize];
for(int i=0;i<h->tblsize;i++)
h->heads[i].next=NULL;
return h;
}
int Hash(int m,int tblsize){
return m%tblsize;
}
list find(hashtbl h,char num[11]){
int pos=Hash(atoi(num+4),h->tblsize);
list p=h->heads[pos].next;
while(p!=NULL){
if(strcmp(p->qq,num)==0) break;
p=p->next;
}
return p;
}
bool Insert(hashtbl h,char num[11],char password[17]){
list p=find(h,num);
if(p!=NULL) {
if(state=='N')
printf("ERROR: Exist\n");
else if(strcmp(p->password,password)==0)
printf("Login: OK\n");
else
printf("ERROR: Wrong PW\n");
return false;
}
else {
if(state=='N')
printf("New: OK\n");
else{
printf("ERROR: Not Exist\n");
return false;
}
int pos=Hash(atoi(num+4),h->tblsize);
p=new node();
strcpy(p->password,password);
strcpy(p->qq,num);
p->next=h->heads[pos].next;
h->heads[pos].next=p;
return true;
}
}
int main(){
int N;
scanf("%d",&N);
hashtbl h=createtbl(N);
char num[11],password[17];
for(int i=0;i<N;i++){
getchar();
scanf("%c %s %s",&state,num,password);
Insert(h,num,password);
}
return 0;
}
QQ帐户的申请与登陆的更多相关文章
- PTA 11-散列3 QQ帐户的申请与登陆 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/723 5-15 QQ帐户的申请与登陆 (25分) 实现QQ新帐户申请和老帐户登陆的简 ...
- 7-15 QQ帐户的申请与登陆
7-15 QQ帐户的申请与登陆(25 分) 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤105),随后给 ...
- 第7章学习小结 不使用STL-map过实践题:QQ帐户的申请与登陆
目录: 一:查找的概念与术语 二:折半查找 三:二叉排序树 四:平衡二叉树 五:B-树 六:B+树 七:散列表 八:实践题:QQ帐户的申请与登陆 九:自我总结 一.查找的概念与术语 (一)查找表 查找 ...
- 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式说明: 输入首先给出一个正整数N(<=105),随后给出N行指令.每行指令的格式为:“命令符 ...
- 5-15 QQ帐户的申请与登陆 (25分) HASH
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数NN(\le 10^5≤105),随后给出NN行指令.每行指令的格 ...
- QQ帐户的申请与登陆-(字符串操作)
题目: 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10^5),随后给出N行指令.每行指令的格式为:“命令符( ...
- 5-05. QQ帐户的申请与登陆(25)(map运用)(ZJU_PAT)
题目链接:http://pat.zju.edu.cn/contests/ds/5-05 实现QQ新帐户申请和老帐户登陆的简化版功能. 最大挑战是:据说如今的QQ号码已经有10位数了. 输入格式说明: ...
- 【PTA 天梯赛训练】QQ帐户的申请与登陆(散列+set模拟)
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10^5),随后给出N行指令.每行指令的格式为:“命令符(空格)Q ...
- QQ帐户的申请与登陆(25 分)
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤),随后给出N行指令.每行指令的格式为:“命令符(空格)QQ号码( ...
随机推荐
- JS动态加载JS
1.直接document.write <script language="javascript"> document.write("<scrip ...
- 昆石VOS3000_2.1.3.2完整安装包及安装脚本
安装包下载地址:http://www.51voip.org/post/55.html 安装教程: 上传安装包 核实 关闭selinux 是否关闭 /usr/sbin/sestatus -v cd /r ...
- VS2015 razor 提示一闪而过
出现的问题链接地址 https://social.microsoft.com/Forums/azure/zh-CN/ff308f71-c743-4f8c-b5e4-a7260c8b5f59/vs201 ...
- Python基础 — NumPy
NumPy--简介 Numpy(Numerical Python的简称)是一个由多维数组对象和用于处理数组的例程集合组成的库. Numpy内部解除了Python的PIL(全局解释器锁),运算效率极 ...
- 线段树+树状数组+贪心 HDOJ 5338 ZZX and Permutations
题目传送门 /* 题意:不懂... 线段树+树状数组+贪心:贪心从第一位开始枚举,一个数可以是循环节的末尾或者在循环节中,循环节(循环节内部是后面的换到前面,最前面的换到最后面).线段树维护最大值,树 ...
- Too many open files故障解决一例
Linux环境WebSphere输出日志: [// ::: EDT] 000090b7 SystemErr R Caused by: java.io.FileNotFoundException: /o ...
- native2ascii命令详解
1.native2ascii简介: native2ascii是sun java sdk提供的一个工具.用来将别的文本类文件(比如*.txt,*.ini,*.properties,*.java等等 ...
- VS中设置xml智能提示
1.第一步:将xsd文件复制到VS的安装目录下 默认安装目录为:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas 2.第二 ...
- SpringBoot 2.x (1):手动创建项目与自动创建项目
SpringBoot 2.x基于Spring Framework 5.x 环境需求如下: JDK1.8或以上 Maven3.2或以上 这里我使用的是Eclipse,IDEA这个工具很强大,但不习惯它 ...
- [ CodeForces 1063 B ] Labyrinth
\(\\\) \(Description\) 给出一个四联通的\(N\times M\) 网格图和起点.图中有一些位置是障碍物. 现在上下移动步数不限,向左至多走 \(a\) 步,向右至多走 \(b\ ...