PAT乙级
无
QWQ___qwq
公众号:CS漫谈
展开
-
提取字符刷题总结
提取( )或[ ]的方法前提:带有[ ]或( )的一串字符已经由getline()读入s中方法:设定两个pointer,一个j用来记录‘[’所在的位置,一个k记录‘]’所在的位置。当找到i之后的j时,将子串str.substr(j+1,k-j-1)赋给字符串型vector,然后break;然后j++,直到找到下一个‘[’,k也从上一个位置进行k++,直到下一个‘]’,重复以上过程,最后将一个字符串都存入以字符串型vector为元素的vector,也就是二维动态数组。while (j < s.le原创 2021-08-12 17:49:51 · 82 阅读 · 0 评论 -
PAT常错点以及坑点总结
日常坑就是密码里有空格用如下输入getchar();for(int i = 0; i < n; i++){ getline(cin, code);题目:PAT乙级1081 检查密码 (15 分)测试点2越界问题以及判断输入的数字1、l>=k(测试点5)2、i<=s.length()-k,也就是选取字符串的起始位置最多可以等于s.length()-k(测试点2,5),否则就越界了题目:[PAT 乙级] 1094 谷歌的招聘 (20 分)(字符串处理)...原创 2021-08-02 14:43:39 · 188 阅读 · 0 评论 -
PAT乙级算法总结
1.进制转换1.将P进制数字x转换为10进制数y。int y=0, product=1;while(x != 0){ y = y + (x % 10) * product; x = x / 10; product = product * p;}2.将十进制数y转换为Q进制数z。int z[40], num= 0;//数组z存放进制数y的每一位,num为位数do{ z[num++] = y % Q;//除基取余 y = y / Q;}while(y != 0);//当商不为0时候原创 2021-07-15 23:59:05 · 223 阅读 · 0 评论 -
PAT乙级分类
模拟 1001字符串 1002 1006 1009 1014 1021 1024 1031 1048 1052 1054 1058 1067 1081 10841086 1093 1094数学 1003 1019 1049查找 1004 1028 1032 1041排序 1015 1045 1055 1085Hash散列 1005 1029 1033 1038 1039 1042 1043 1047 1083素数 1007 1013大整数运算 1017贪心算法 1020 1023进制转换原创 2021-03-16 15:14:58 · 156 阅读 · 0 评论 -
第一章 基础算法
文章目录基础算法(一)快速排序归并排序基础算法(一)快速排序void quick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1];//i,j指针取左右两端的两侧,因为后面要直接加1 while (i < j)//知道>=为止 { do i ++ ; while (q[i] < x原创 2021-08-06 20:35:38 · 665 阅读 · 2 评论 -
[PAT 乙级] 1034 有理数四则运算 (20 分)——(有理数四则运算)2021-09-04
y总的代码,有点冗长,不管了,快考试了。#include<iostream>using namespace std;typedef long long LL;LL gcd(LL a,LL b) { return b?gcd(b,a%b):a;}string print(int x,int y){}void print(LL a,LL b){ LL d=gcd(a,b); a/=d,b/=d; if(b<0) a*=-1,b*=-1; .原创 2021-09-04 11:32:09 · 54 阅读 · 0 评论 -
[PAT 乙级] 1074 宇宙无敌加法器 (20 分)——(逻辑题)2021-09-03
考察高精度加法。注意特殊情况:0表示十进制#include<iostream>#include<vector>using namespace std;vector<int> add(vector<int> &A,vector<int> &B,string n){ if(A.size()<B.size()) return add(B,A,n); int t=0; vector<int&g.原创 2021-09-03 10:51:02 · 143 阅读 · 0 评论 -
[PAT 乙级] 1005 继续(3n+1)猜想 (25 分)——(Hash散列)2021-08-26
我的代码#include<iostream>#include<map>#include<vector>#include<algorithm>using namespace std;bool cmp(int a,int b){ return a>b;}int main() { int num; map<int,int> mp; cin >> num; for (int i =.原创 2021-08-26 09:47:45 · 60 阅读 · 0 评论 -
[PAT 乙级] 1084 外观数列 (20 分)——(字符串处理)2021-08-26
#include<iostream>#include<cstring>using namespace std;int main(){ int d,n; cin>>d>>n; string cur=to_string(d);//当前数列 for(int k=0;k<n-1;k++){//递推n-1次就到第n项了 string next; for(int i=0;i<cur.siz.原创 2021-08-26 07:54:00 · 84 阅读 · 0 评论 -
[PAT 乙级] 1071 小赌怡情 (15 分)——(水题)2021-08-25
AC代码:条件没考虑清楚,只AC了#include<iostream>using namespace std;int main(){ int sum,k,n1,b,t,n2; cin>>sum>>k; for(int i=0;i<k;i++){ cin>>n1>>b>>t>>n2; if(sum==0) {cout<<"Game Over.".原创 2021-08-25 14:42:06 · 91 阅读 · 0 评论 -
[PAT 乙级] 1042 字符统计 (20 分)——(Hash散列)2021-08-25
#include<iostream>#include<map>#include<vector>#include<algorithm>using namespace std;struct node{ char c; int num; bool operator<(const node &t) const{ if(num==t.num) return c<t.c; return.原创 2021-08-25 13:18:13 · 60 阅读 · 0 评论 -
[PAT 乙级] 1007 素数对猜想 (20 分)——(素数)2021-08-24
分析:判断素数的函数isprime这样写:对于数字a,i从2到根号a,如果a能够被其中⼀个i整除,说明i不是素数,return false,否则说明a是素数return true;对于输⼊数据N,for循环中的i从5到N依次判断i-2和i是否是素数,如果都是素数,则统计个数的cnt++,最后输出cnt即可~#include <iostream>using namespace std;bool isprime(int a) { for (int i = 2; i * i <= .原创 2021-08-24 16:14:21 · 69 阅读 · 0 评论 -
[PAT 乙级] 1013 数素数 (20 分)——(素数)2021-08-24
注意:isPrime()函数的细节#include<iostream>using namespace std;bool isprime(int n){ if(n<=1) return false; for(int i=2;i*i<=n;i++){//注意这里是小于等于 if(n%i==0) return false; } return true;}int main(){ int m,n,count=0,f; .原创 2021-08-24 16:08:16 · 54 阅读 · 0 评论 -
[PAT 乙级] 1093 字符串A+B (20 分)——(字符串处理)2021-08-23
记得用getline()输入。#include <iostream>#include <map>#include <string>using namespace std;int main(){ string a,b,c; getline(cin,a); getline(cin,b); c=a+b; map<char,int> m; for(int i=0;i<c.size();i++){ .原创 2021-08-23 15:24:58 · 73 阅读 · 0 评论 -
[PAT 乙级] 1081 检查密码 (15 分)——(字符串)2021-08-23
注意:1.使用getline()读入2.一定要加break;(测试点2,4)测试点分析:测试点2,4都是其中包含空格,使用getline()读入,然后加break就行了如果不加break;会变成这样:输入:1pass6666.wor d输出:Your password is tai luan le.Your password is tai luan le.Your password is tai luan le.#include <iostream>usi.原创 2021-08-23 14:11:16 · 142 阅读 · 0 评论 -
[PAT 乙级] 1076 Wifi密码 (15 分)——(简单题)2021-08-21
#include<iostream>using namespace std;int main(){ int n; cin>>n; getchar(); for(int i=0;i<n;i++){ string s; getline(cin,s); cout<<s[s.find('T')-2]-'A'+1; } return 0;}原创 2021-08-21 16:21:42 · 84 阅读 · 0 评论 -
[PAT 乙级] 1072 开学寄语 (20 分)——(简单题)2021-08-21
#include<iostream>#include<vector>using namespace std;int main(){ int n,m,stsum=0,forbsum=0; cin>>n>>m; getchar(); string s; getline(cin,s); for(int i=0;i<n;i++){ string tname; vector&l.原创 2021-08-21 16:13:14 · 86 阅读 · 0 评论 -
[PAT 乙级] ——(水b题)2021-08-20
#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ int n,m; cin>>n>>m; for(int i=0;i<n;i++){ int G,G1,G2,count=0; cin>>G2; vector<int> v.原创 2021-08-20 13:14:48 · 73 阅读 · 0 评论 -
[PAT 乙级] 1092 最好吃的月饼 (20 分)——(二维数组)2021-08-19
水题·#include<iostream>#include<map>#include<algorithm>#include<vector>using namespace std;struct node{ int z,num; bool operator<(const node &t) const{ if(num==t.num) return z<t.z; else return .原创 2021-08-19 23:02:57 · 60 阅读 · 0 评论 -
[PAT 乙级] 1075 链表元素分类 (25 分)——(链表)2021-08-19
学习: v1.insert(v1.end(),v2.begin(),v2.end()); v1.insert(v1.end(),v3.begin(),v3.end());#include<iostream>#include<vector>using namespace std;const int N=1e5+10;int e[N],ne[N];int h,n,k;int main(){ cin>>h>>n>>k;.原创 2021-08-19 17:06:20 · 52 阅读 · 0 评论 -
[PAT 乙级] 1062 最简分数 (20 分)——(分数化简)2021-08-19
注意:此题坑点还挺多坑点1:它给出的l和r不一定是l<r,如果l>r则交换一下边界。坑点2:用double是无法存储精确的值的,比较时不能写成x>=l&&x<=r,这里需要写成x-l>=1e-8&&1e-8<=r-x,表示如果要是x和l的差大于一个很小的值(1e-8)就表示他们相等。坑点3:注意学习如何输出最后不带空格if(flag!=0) cout<<" "; cout<<i<.原创 2021-08-19 11:12:48 · 196 阅读 · 0 评论 -
PAT warning: ignoring return value of ‘int scanf(const char*, ...)’忽略scanf函数的int返回值
加了几个exit(0);之后发现,错误出现在for循环里面,仔细一看才发现是把for(int i=0; i <=k;i++){}写成for(int i=0; 1 <=k;i++){}把 i 写成 1 了。原创 2021-08-19 11:00:06 · 2166 阅读 · 0 评论 -
关于函数返回值是vector({}/大括号)的一些理解
最近看到有人用函数返回了一个大括号感到不解,查了一下,如下。原创 2021-08-16 21:51:00 · 1988 阅读 · 4 评论 -
[PAT 乙级] 1056 组合数的和 (15 分)——(数学)2021-08-16
水题,但是使我产生了一些想法,做了一下实验:#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;int main() { string s1, s2, s3; s1 = '2'; s2 = '8'; s3 = s1 + s2; cout << s3 << en.原创 2021-08-16 14:16:59 · 90 阅读 · 0 评论 -
[PAT 乙级] 1055 集体照 (25 分)——(排序)2021-08-15
说明:柳神的代码好快呀,震惊浪神的代码很好理解。我不会,直接照搬吧。柳神题解分析:建⽴结构体node,⾥⾯包含string类型的姓名name和int类型的身⾼height~将学⽣的信息输⼊到node类型的vector数组stu中~然后对stu数组进⾏排序(cmp函数表示排序规则,如果身⾼不等,就按照身⾼从⼤到⼩排列;如果身⾼相等,就按照名字从⼩到⼤的字典序排列~)然后⽤while循环排列每⼀⾏,将每⼀⾏应该排列的结果的姓名保存在ans数组中~因为是⾯对拍照者,后排的⼈输出在上⽅,前排输出在下⽅.原创 2021-08-15 18:35:25 · 109 阅读 · 0 评论 -
[PAT 乙级]1057 数零壹 (20 分) ——(进制转换)
注意:sum要设置为0,如果没有字母时候要特判一下输出0 0。#include<iostream>using namespace std;int main(){ string s; int sum;//求和要初试为0; getline(cin,s); bool flag=false; for(int i=0;i<s.size();i++){ if(isupper(s[i])) { sum+=(s[i]+.原创 2021-08-15 13:31:37 · 101 阅读 · 0 评论 -
[PAT 乙级] 1045 快速排序 (25 分)——(排序)2021-08-14
#include<iostream>#include<vector>#include<algorithm>using namespace std;const int N=100010,INF=2e9;int n;int a[N],l[N],r[N];int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++).原创 2021-08-14 21:26:56 · 77 阅读 · 0 评论 -
[PAT 乙级] 1070 结绳 (25 分)——(排序)2021-08-14
y总yyds思路:哈夫曼树最大值的构成方式:一定要较短的绳子先除,较长的绳子后除。#include <iostream>#include <algorithm>using namespace std;const int N = 10010;int a[N];int n;int main(){ scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); .原创 2021-08-14 15:44:45 · 107 阅读 · 0 评论 -
[PAT 乙级] 1015 德才论 (25 分)——(排序)
#include<cstdio>#include<iostream>#include<algorithm>#include<vector>using namespace std;const int N=1e5+10;struct student{ int id; int a,b;}temp;int n,L,H;vector<student>v1,v2,v3,v4;bool cmp(student a,student b){.原创 2021-08-14 10:12:33 · 62 阅读 · 0 评论 -
[PAT 乙级] 1078 字符串压缩与解压 (20 分)——(逻辑题)2021-08-13
#include<iostream>#include<map>#include<string>using namespace std;string num;int cnt=1;void jieya(string s) { for (int i = 0; i < s.length(); i++) { if (s[i] >= '0' && s[i] <= '9') { .原创 2021-08-13 21:00:01 · 84 阅读 · 0 评论 -
[PAT 乙级] 1073 多选题常见计分法 (20 分)——(逻辑题)2021-08-13
#include <iostream>#include <vector>#include <cmath>using namespace std;int main() { int n, m, optnum, truenum, temp, maxcnt = 0; int hash[] = {1, 2, 4, 8, 16}, opt[1010][110] = {0}; char c; scanf("%d %d", &n, &am.原创 2021-08-13 14:26:07 · 110 阅读 · 0 评论 -
[PAT 乙级] 1058 选择题 (20 分)——(逻辑题)2021-08-12
我草,只对了一个测试点,搞不好还是侥幸过得#include <iostream>#include <vector>#include<algorithm>using namespace std;struct node{ int score; string ans;}prob[105];string trim(string &s){ int index = 0; if(!s.empty()) { .原创 2021-08-13 00:00:04 · 357 阅读 · 0 评论 -
[PAT 乙级] 1052 卖个萌 (20 分)——(字符串处理)2021-08-12
分析:因为不知道⼀⾏有多少个表情,所以⽤⼀个string类型的不定⻓⼆维数组vector存储表情包,以及可以调⽤v.size()顺便解决不知道⼀⾏有多少个表情的问题~~不定⻓数组共三⾏,分别对应输⼊⽤例的三⾏只不过在存储如数组之前把它们的⽅括号去掉在存储这⾥可以⽤string的substr⽅法实现~然后根据输⼊的数字序号输出对应的表情~耶耶耶能从这道题⾥⾯复习好多知识点呢~~注意:1.“Are you kidding me? @/@”的’\’是转义字符,想要输出’\’就要⽤’\’表示~2.第⼀.原创 2021-08-12 17:44:42 · 116 阅读 · 0 评论 -
[PAT 乙级] 1089 狼人杀-简单版(20 分)——(逻辑题)2021-08-12
题目大意:N个人有两个狼人,有2个说谎者;2个说谎者中一个是狼人,一个是好人;分析将数据存入vector型数组v(n+1),方便后面判断。之后写两层for循环枚举一下所有人的情况。先假设 i、j 是两个狼人,i 是外层for循环,从1到n(从1到n比较方便);j 是内层for循环要从i+1~n。循环之前,先申请个vector数组a(N+1,1),也就是n+1个数组元素的值都是1,这里a数组元素的值为1表示是好人,为-1表示是狼人,因此由于我们假设i,j表示狼人,还需要将a[i]=a[j]=-1.原创 2021-08-12 10:03:44 · 612 阅读 · 0 评论 -
[PAT 乙级] 1088 三人行 (20 分)——(逻辑题)2021-08-11
毫无思路,直接看答案分析:丙不⼀定是int值,可能是4.5这样的数字~所以要⽤double存储丙~i、j、k分别代表甲⼄丙~i从99遍历到10找到符合题意的那个数字即可~#include <iostream>#include <cmath>using namespace std;int m, x, y;void print(double t) { if (m == t) printf(" Ping"); else if (m < t) printf(" Co.原创 2021-08-11 18:46:39 · 117 阅读 · 0 评论 -
[PAT 乙级] 1091 N-自守数 (15 分)——(逻辑题)2021-08-11
柳神代码分析:从1-9枚举,判断是否存在N。通过to_string把乘积转成字符串,再通过substr取末尾⼦串⽐较即可~#include <iostream>#include <string>using namespace std;int main() { int m; cin >> m; while (m--) { int k, flag = 0; cin >> k; .原创 2021-08-11 17:46:28 · 91 阅读 · 0 评论 -
[PAT 乙级] 1082 射击比赛 (20 分)——(逻辑题)2021-08-11
#include<iostream>#include<cmath>#include<map>#include<vector>#include<algorithm>using namespace std;struct node{ string id; int score;};bool cmp(struct node a,struct node b){ return a.score<b.score;}.原创 2021-08-11 14:48:30 · 59 阅读 · 0 评论 -
[PAT 乙级] 1079 延迟的回文数 (20 分)——(逻辑题)2021-08-11
#include <iostream>#include <algorithm>using namespace std;string rev(string s) { reverse(s.begin(), s.end()); return s;}string add(string s1, string s2) { string s = s1; int carry = 0; for (int i = s1.size() - 1; i &g.原创 2021-08-11 13:50:05 · 89 阅读 · 0 评论 -
[PAT 乙级] 1068 万绿丛中一点红 (20 分)——(逻辑题)
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<map>using namespace std;int a[1005][1005];int dx[8]={-1,-1,-1,0,0,1,1,1};int dy[8]={-1,0,1,-1,1,-1,0,1};int n,m,k;bool f(int x,int y,int s.原创 2021-08-10 18:17:21 · 103 阅读 · 0 评论 -
[PAT 乙级] 1066 图像过滤 (15 分)——(逻辑题)
分析:不⽤存储到数组中,可以边输⼊边处理输出~假设当前输⼊的temp值在a~b区间就将temp替换为num~以%03d的⽅式输出temp~#include<iostream>using namespace std;int main(){ int m,n,a,b,val; scanf("%d%d%d%d%d",&m,&n,&a,&b,&val); for(int i=0;i<m;i++){ for(in.原创 2021-08-10 18:15:35 · 82 阅读 · 0 评论