1.学习总结(2分)

1.1查找的思维导图

1.2 查找学习体会

查找这一章很有实践意义,明白了根据不同的数据还有其相应的存储结构应采取相对应的查找办法。其中很多思想值得借鉴学习,里面的应用也很灵活值得探索。

2.PTA实验作业(4分)


2.1 题目1:是否二叉搜索树

2.2 设计思路(伪代码或流程图)

根据并利用二叉树的特性可得:

1.判断是否为空树,是则直接返回false

2.不是空树则与左右孩子比较看是否大于左孩子小于右孩子,由孩子再进行递归操作

2.3 代码截图

2.4 PTA提交列表说明

1.编译错误

 

输入的问题,手抖输入了一些奇怪的东西。

 

改正之后,看到最上面的错误选项才恍然大悟自己忘了考虑正确的情况

解决办法还在探索中。。。

 题目二:qq账户登陆与申请

设计思路:

因为数据较大,所以采用map容器来进行编写。

根据输入的n的大小,给整个函数加一个大的循环

通过输入是“L”还是“N”来进行第一层判断

然后根据老用户的话密码以及QQ号是否输入正确而输出

新用户的话看申请号码是否重复以及是否申请成功进行输出

代码截图:

 

PTA提交列表说明:

1.编译错误:还是一些括号的问题,是没有养成对齐的好习惯,代码格式问题以后要多加注意。

2.部分正确:

忘记在“L”的情况里加上如果已有此账号则无法注册的先决条件,导致出现段错误

 改正之后就好了。

3.1 PTA排名(截图带自己名字的排名)

3.2 我的总分:87

4. 阅读代码(必做,1分)

 

题目:给出一串数以及一个数字 C,要求计算出所有 A-B=C 的数对 的个数。( 注意: 不同位置的数字一样的数对算不同的数对)
Input Format

 

第一行包括 2 个非负整数 N 和 C,中间用空格隔开。 第二行有 N 个整数,中间用空格隔开,作为要求处理的那串数。
Output Format

输出一行,表示该串数中包含的所有满足 A-B=C 的数对的个数。

Sample Input
4 1
1 1 2 3
Sample Output
3
Data Limit

 

对于 50%的数据, N <= 2000; 对于 100%的数据, N <= 200000。

 

map没有定义过某个键,它就不会占用空间,当你去映射一个没有访问过的键时,它会自动返回0。

等于是说map桶去除了所有的空桶所占的空间。那么这题中我们只会用到<=200000个桶。

 

#include <cstdio>
#include <map>
using namespace std;
map<long,int> m;//咱们的map桶
int n;
long c,num[200005];
int main()
{
    scanf("%d%ld",&n,&c);//n个数字,c是差值
    int ans=0,i=n;
    while(i--)
    {
        scanf("%d",&num[i]);
        m[num[i]]++;//装到桶里去~
    }
    i=n;
    if(c>0)//特判0
        while(i--)
            ans+=m[num[i]+c];
    else
        while(i--)
            ans=ans+m[num[i]+c]-1;//当c为0时每个数字还得排掉自己呢~
    printf("%d",ans);
    return 0;
}