一:题目

实现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

二:思路分析

本题又用到了map容器,既然用到了容器,我们就会考虑该如何 往容器里赋值吧,然后再考虑容器当中的值该如何利用才能符合题意。我用的数组往其中赋值,赋值的对象为 容器当中 未出现过的号码(指的是新用户),然后在’L’操作中 看输入的号码是否在容器中出现过 ,出现过说明这是一个已经申请好的号码,如果没有则输出”ERROR: Not Exist“;如果出现过,然后在比较密码的正确性。

三:上码

#include<bits/stdc++.h>
using namespace std;int main(){int N;cin >> N;map<string,string>m;map<string,string>::iterator t;for( int i = 0; i < N; i++ ){char p1;string str1,str2;cin >> p1 >> str1 >> str2; t = m.find(str1);//t就相当于C里面的指针 if(p1 == 'N'){if( t == m.end()){m[str1] = str2;//将新号码装进容器当中 cout << "New: OK" << endl; }else{cout << "ERROR: Exist" << endl; }   }if(p1 == 'L'){if(t == m.end()){cout << "ERROR: Not Exist" << endl;}else{if(m[str1] == str2)//这是 又输入的密码 和 map容器当中存进去的进行比较  cout << "Login: OK" << endl;elsecout << "ERROR: Wrong PW" << endl;  }}}
}

另一种做法:

但pta的最后一个点过不去
我自己用的测试例子:
专门测试最后一个测试点,输出都正确 ``
4
N 1234567890 myQQ@qq.com
L 1234567890 myQQ@qq.com
N 1234567891 myQQ@qq.cop
L 1234567891 myQQ@qq.cop

4
N 1234567890 myQQ@qq.com
N 1234567891 myQQ@qq.cop
L 1234567891 myQQ@qq.cop
L 1234567890 myQQ@qq.com

//如果第一个用户为老用户 则必定不存在  直到遇见新用户后 再调用 L 时考虑 其密码的规范性 来判断其是否存在#include<bits/stdc++.h>
using namespace std;void New_Old(vector<char>&v1,vector<int>&v2,vector<string>&v3){int flag = 0,m = -1,n;vector<int>p1;//创建一个容器 存正确的号码vector<string>p2;  for( int i = 0; i < v1.size(); i++ ){if(v1[i] == 'N' && flag == 0) //记录下正确的号码和密码 {m = i;flag = 1; p1.push_back(v2[m]); //将正确申请好的 号码 和 密码 存进容器当中 p2.push_back(v3[m]);//   cout << "New: OK" << endl;        }else if( v1[i] == 'N' ) //后面又遇到了 N {if(v2[i] == v2[m])cout << "ERROR: Exist" << endl;   } //出现新的号码时 if(  v2[i+1] != v2[m]  )  {flag = 0;} if(v1[i] == 'L'){if(!p1.empty()  ){//挑选出 已经申请好的 号码  for( int k1 = 0; k1 < p1.size(); k1++){if(v2[i] == p1[k1]){n = k1;break;}}if( v2[i] == p1[n])//老的号码和以前申请的号码相同  接下来比较 密码输入的正确性 和 规范性 {string str = v3[i];string str1 = p2[n];//标准的密码 int temp1 = 0;//判断是否有 空格for( int j = 0; j < str.size(); j++ ){if(str[j] == ' ')temp1 = 1;} if(str.size() < 6 && str.size() > 16){cout << "ERROR: Wrong PW" << endl;  }else if( temp1 == 1 ){cout << "ERROR: Wrong PW" << endl;}else if( str1 != str ){cout << "ERROR: Wrong PW" << endl;}else{cout << "Login: OK" << endl;}} }else  //老号码还没有申请 {cout << "ERROR: Not Exist" << endl; }   }}
}int main(){int N;vector<char>v1;vector<int>v2;vector<string>v3;cin >> N;for(int i = 0; i < N; i++ ){char temp1;int temp2;string temp3;cin >> temp1 >> temp2 >> temp3;v1.push_back(temp1);v2.push_back(temp2);v3.push_back(temp3);}New_Old(v1,v2,v3);}4
N 1234567890 myQQ@qq.com
L 1234567890 myQQ@qq.com
N 1234567891 myQQ@qq.cop
L 1234567891 myQQ@qq.cop

7-15 QQ帐户的申请与登陆 (25 分)(map做法+思路分析)相关推荐

  1. # 7-15 QQ帐户的申请与登陆 (25 分)

    7-15 QQ帐户的申请与登陆 (25 分) 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10^5​ ),随后 ...

  2. 11-散列3 QQ帐户的申请与登陆 (25 分)

    实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤),随后给出N行指令.每行指令的格式为:"命令符(空格) ...

  3. 7-15 QQ帐户的申请与登陆 (25分) 【map】

    问题描述: 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10​5​​),随后给出N行指令.每行指令的格式为:& ...

  4. QQ帐户的申请与登陆 (25分)

    实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤105 ),随后给出N行指令.每行指令的格式为:"命令符 ...

  5. 7-18 QQ帐户的申请与登陆 (10 分)

    7-18 QQ帐户的申请与登陆 (10 分) 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤105),随后给出N ...

  6. 7-13 QQ帐户的申请与登陆

    7-13 QQ帐户的申请与登陆 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤105),随后给出N行指令.每行指 ...

  7. QQ帐户的申请与登陆

    7-34 QQ帐户的申请与登陆 (25 分) 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10^​5),随后给 ...

  8. 蓝桥 :QQ帐户的申请与登陆

    QQ帐户的申请与登陆 (25 分) 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10​5​​),随后给出N行指 ...

  9. PTA QQ帐户的申请与登陆 思路分析及代码解析

    PTA QQ帐户的申请与登陆 思路分析及代码解析v1.0 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析 三.具 ...

最新文章

  1. myisam为什么比innodb查询快_InnoDB 和 MyISAM的数据分布是什么样的?
  2. JDBCUtils工具类编写
  3. python m什么意思_Python -m参数原理及使用方法解析
  4. 如何确保SAP OData服务的返回结构为JSON格式
  5. Windows系统下,Android Studio的安装
  6. alien指令 linux,使用alien命令让deb包和rpm包互相转换
  7. JavaScript:JavaScript语法的详细介绍
  8. 关闭mysql的安全模式_mysql开启和关闭安全模式
  9. java数组整组处理_java – 使它漂亮:同时处理数组
  10. 「算法介绍」如何设计最安全的加密机制
  11. 游戏对战平台研究终结
  12. C++练习 计算年份所属生肖
  13. 华为+android+root权限获取root,华为root权限怎么开启怎么获取(简单华为手机ROOT教程)...
  14. 华为WEB前端全栈成长计划招募
  15. 使用curl工具通过Gopher协议发送GET请求
  16. 数据结构-循环双链表
  17. 公司基本面分析业绩评价指标
  18. PPP与PPPoE的学习
  19. 阿里云购买磁盘后挂载
  20. R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现

热门文章

  1. oracle 文件写 n r,[oracle]log_archive_dest_n与DB_RECOVERY_FILE_DEST
  2. [转]面试官,不要再问我三次握手和四次挥手
  3. 140种Python标准库、第三方库和外部工具都有了
  4. 【专升本计算机】专升本计算机期末考试复习题(C卷附答案)
  5. 【ArcGIS风暴】全站仪、RTK测量坐标数据在CASS和ArcGIS中展点的区别和联系(带数据)
  6. C语言之理解(*(void (*)())0)()和signal函数
  7. Android插件化开发之运行未安装apk的activity
  8. Android之如何ubuntu环境下在手机里面快速找到apk的位置然后拉下来
  9. Python turtle库实现基本剖析
  10. linux磁盘第一个扇区分析,Linux磁盘分区