PAT初级刷题思路汇总

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 frequency,如果s[i]是字母则frequency[s[i]]++

map::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

1020 月饼

sort的比较函数cmp——return a

输出保留两位小数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初级刷题思路汇总)