1.学习总结(2分)
1.1查找的思维导图
图片查看地址:[https://www.processon.com/view/link/5b08fb76e4b0fccf7237d4ba]
1.2 1.2 查找学习体会
- 本周学习了map的用法,虽然还不熟悉,但可以上手,还需要更多的了解。
- 使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。
使用find,返回的是被查找元素的位置,没有则返回map.end()。
map的基本用法:[https://blog.csdn.net/u012577123/article/details/46821581] - 掌握二叉树节点删除,平衡二叉树插入、删除节点调整,对B树的操作,解决哈希冲突等的方法、画法。
- 查找的代码比较多,没有全部掌握熟记。
2.PTA实验作业(4分)
2.1 题目1:QQ帐户的申请与登陆
2.2 设计思路(伪代码或流程图)
申请STL容器<long long, string>QQ存放用户信息
迭代器map<long long, string>::iterator iter;
定义 ch:新/旧号码 ,number:QQ号,password:密码
输入N,表示N条指令;
for i=0 to N
输入ch、number、password;
调用迭代器,查找map里面的是否有这个账号
if ch为L,旧号码
if QQ号存在,判断密码是否正确
if 正确,输出"Login: OK";
else 输出"ERROR: Wrong PW";
if QQ号不存在,输出"ERROR: Not Exist";
if ch为N,新号码
if QQ号存在,输出"ERROR: Exist";
if QQ号不存在,添加号码信息,输出"New: OK";
end for
2.3 代码截图
2.4 PTA提交列表说明。
-
编译错误:编译器用c(gcc)错误
解决方法:编译器改用c++ -
答案错误
解决方法:QQ[number]==password;
多了一个=
2.1 题目2:航空公司VIP客户查询
2.2 设计思路(伪代码或流程图)
申请STL容器<string,int>mymap存放用户信息
输入飞行记录条数N、最低里程K
for i=0 to N
输入身份证号id、飞行里程mileage;
if 低于K公里按k公里累积,按K公里累积;
if 有相同的身份证号,累积飞行里程 ;
else 记录飞行里程;
end for
输入M,表示M个查询人身份证号
for i=0 to M
输入查询人的身份证号id;
if 有此查询人,输出里程累计值;
else 输出“No Info”
end for
2.3 代码截图
2.4 PTA提交列表说明。
-
运行超时
解决方法:看群里大佬讨论后,将cin ; cout ;
改成scanf ; printf ;
后解决
经过度娘找到原因:cin,cout,printf,scanf效率对比: [http://www.cnblogs.com/killerlegend/p/3918452.html] -
格式错误
解决方法:
2.1 题目3:二叉搜索树中的最近公共祖先
2.2 设计思路(伪代码或流程图)
定义p=T;
遍历树,找节点u
if 树中没有u ,返回ERROR;
遍历树,找节点v
if 树中没有v ,返回ERROR;
while(p不为空时)
if u和v都小于Key,则LCA位于左子树中;
if u和v都大于Key,则LCA位于右子树中;
if 找到最近公共祖先,则返回该值;
end while
2.3 代码截图
2.4 PTA提交列表说明。
- 部分正确:本题代码度娘提供帮助,修改时没注意改错
解决方法:重新检查代码,发现修改代码时改错了
3.截图本周题目集的PTA最后排名(3分)
3.1 PTA排名
3.2 我的得分:145(2.5分)
4. 阅读代码(必做,1分)
- 代码功能:7-1 QQ帐户的申请与登陆
- 代码理解:对于哈希表的操作代码还比较陌生,因此本题我自己用的是map的写法,下面提供hash方法
- 代码地址:[https://www.cnblogs.com/gk2017/p/7141175.html?utm_source=itdadao&utm_medium=referral]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 110017
typedef struct UserNode* ptrUser;
struct UserNode{
int ID;
char password[20];
ptrUser next;
};
ptrUser HashTable[MAXN];
void InsertUserNode(int idx,int id,char* pwd)//插入新信息
{
ptrUser P;
P=new UserNode;
P->ID=id;
strcpy(P->password,pwd);
P->next=HashTable[idx];
HashTable[idx]=P;
}
int Hash(int x)
{
return x%MAXN;
}
ptrUser FindUser(int id)//找QQ号
{
ptrUser P;
int idx=Hash(id);
P=HashTable[idx];
while(P!=NULL)
{
if (P->ID==id)
return P;
P=P->next;
}
return NULL;
}
void Login(int id,char pwd[])//老帐户
{
ptrUser P;
P=FindUser(id);
if(P==NULL)//老帐户QQ不存在
{
printf("ERROR: Not Exist\n");
return;
}
else if(strcmp(P->password,pwd)==0)//QQ存在,密码正确
{
printf("Login: OK\n");
}
else//密码错误
printf("ERROR: Wrong PW\n");
}
void NewUser(int id,char pwd[])//新账户
{
ptrUser P;
P=FindUser(id);
if(P!=NULL)//号码已存在
{
printf("ERROR: Exist\n");
return;
}
else//新账户申请成功
{
InsertUserNode(Hash(id),id,pwd);//插入新信息
printf("New: OK\n");
}
}
int main()
{
int i,N;
char command[3];
int id;
char pwd[20];
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%s",command);
scanf("%d",&id);
scanf("%s",pwd);
if(command[0]=='L')//老帐户
Login(id,pwd);
else if(command[0]=='N')//新账户
NewUser(id,pwd);
}
}