美文网首页
PAT初级刷题思路汇总

PAT初级刷题思路汇总

作者: qratosone | 来源:发表于2016-02-29 23:53 被阅读0次

    1036?

    输入时忽略某字符:

    cin.ignore()

    或者直接用scanf

    1021 个位数统计

    用一个计数器数组来统计每个数字出现的频率

    1023 组个最小数

    算法:用一个数组a存储出现的数字数,输入时同时获得非0的min

    输出时先输出一个min,然后从头遍历存储数组——当a[i]>0时输出一个i并让a[i]–

    1043 输出PATest

    while scanf!=EOF——检测输入,当没有输入时跳出循环

    算法:如果当前输入的字母是PATest其中之一的话则直接让字母对应的计数器变量+1

    输出时依次输出PATest,每输出一个就让对应计数器减一

    1009 说反话

    while cin>>str自动按空格切分并输入到str

    用一个stack储存放进来的str,对应头文件stack

    1011 A+B和C

    大整数直接用long long int

    1004 成绩排名

    使用一个class数组student,用first和Last记录当前的最大和最小编号,然后直接输出即可

    1038 统计同成绩学生

    用一个vector储存输入的成绩,然后用一个计数器数组储存对应每个数字出现的频率

    1031 查验身份证

    对输入的身份证号进行检查:

    如果前十七位发现字母直接break,反之则按照权重计算出当前的数temp,加到checkCount中,算完之后对11取mod

    用数组checkNum记录计数器i对应的输入ID是否合法,合法为1不合法为2

    如果循环没跑完则直接记为0

    跑完了则检验最后一位是否符合

    1008 数组元素循环右移

    写一个函数让数组整体右移一次,具体做法是从后往前处理以免造成覆盖

    需要偏移shift位就让这个函数执行shift次

    1017 A除以B

    对于巨大的整数,作为string输入

    从第一位开始,每次都执行temp=temp*10+下一位操作,然后每执行完一次直接取余数

    1022 D进制

    用stack做进制转换——连续取余,然后将mod推入stack

    1027 输出沙漏

    总星号数计算公式total=2*count^2-1

    对于前count行,第i行输入i个空格和2count-1-2i个星号,注意结尾不要输入空格

    反向输入同理

    1032 挖掘机

    用计数器数组计算各校得分,然后搜索得分最高的学校及其总分

    1042 字符统计

    写个函数判断是否为字母

    使用map<char,int> frequency,如果s[i]是字母则frequency[s[i]]++

    map<char,int>::iterator it

    it->first为字母,it->second为出现个数

    1029 旧键盘

    首先全部转换为大写

    用一个set来统计数字(去重)——set.insert返回的是一组pair,使用second返回插入成功与否的提示,如果插入成功则推入候补向量中

    1007 素数对猜想

    先生成素数列表,然后再检验素数对

    1013 数素数

    生成素数列表,然后输出即可——注意输出格式

    1028 人口普查

    定义一个类elder,建立一个函数成员too young,判断当前最年轻和最年长的

    注意年龄计算公式是否合法

    1005 3n+1继续

    使用计数数组,把每一步产生的中间值tmp记录到计数数组中

    f[tmp]=1

    如果计数数组里没有,!f[input[i]],就是关键数,推入输出向量中

    1019 数字黑洞

    先把输入的数字每一位都保存到数组中,然后排序

    按从小到大和从大到小分别还原得到big和small

    输出方式printf(%04d-%04d=%04d\n)

    1010

    使用bool型标记变量flag

    1030 完美数列

    输入后排序,然后两层嵌套循环

    maxlen=0,for i=0(for j=i+maxlen) if maxlen<j-i maxlen=j-i

    1020 月饼

    sort的比较函数cmp——return a<b为升序排列

    输出保留两位小数printf %.2f

    注意为了保证精度,全程使用double

    1003 我要通过

    对于xPATx形式,P的个数与A的个数乘积应该等于T的个数

    1014 福尔摩斯

    尽量用For循环,然后求星期的时候两个序列一起往前走(只考虑字符一一对应的情况)

    1025 反转链表

    用数组addr保存每个链表在向量中的位置,对应temp.address

    int count=0

    vinput.pushback temp

    addr[temp.address]=count++

    memset来自于memory.h

    遍历时从初始地址进入,在input中找到对应链表后推入vector中

    p=init

    int pos=addr[p]

    linknode.pushback vinput[pos]

    p=vinput[pos].next

    系统自带reverse函数,来自头文件algorithm

    1045 快速排序

    主元的条件:恰好位于正确的顺序上,且为当前最大元��

    1015 德才论

    重写sort cmp函数

    1044 火星数字

    getline(cin,input[i](字符串),‘\n’)注意第一个可能是废的

    获取子字符串的方法:string.substr(begin,end)

    另外注意高位为整数(恰好为26)低位为0时不要输出

    1040 有几个PAT

    从后往前数,PAT的数量等于P的数量乘A再乘T

    if i=T numT++

    if i=A numAT+=numT

    if i=P numPAT+=numAT

    1033 旧键盘打字

    getline读取一行

    定义一个判断函数notbad,对一个字符搜索bad字符串:

    如果有大写,且+在bad里则返回false

    全部转化为小写再一一判断

    判断通过之后直接用putchar输出即可

    相关文章

      网友评论

          本文标题:PAT初级刷题思路汇总

          本文链接:https://www.haomeiwen.com/subject/wpigkttx.html