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提交列表说明。

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分)

#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);
    }
}

5. 代码Git提交记录截图

posted on 2018-05-26 22:17  呜啦  阅读(235)  评论(2编辑  收藏  举报