pat乙级备考
weixin_45663946
这个作者很懒,什么都没留下…
展开
-
PAT乙级1044火星数字—字符串的数据处理(不会写)
转载自:https://blog.csdn.net/whenever5225/article/details/101828855?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-原创 2020-11-01 10:56:16 · 167 阅读 · 0 评论 -
PAT乙级-1045快速排序(主元的位置与排序后该元素的位置相同)还有坑
https://pintia.cn/problem-sets/994805260223102976/problems/994805278589960192这道题: 开始没思路,就暴力嘛,遍历每一位数进行判断,for循环 里套了两个for循环,直接超时,但还能得一半分。思路: 主元的位置与排序后该元素的位置相同,而且还必须满足后面 的大于前面的(还有个坑是当主元个数为0时应该换行输出)#include<bits/stdc++.h>using namespace std;int原创 2020-11-01 10:48:47 · 206 阅读 · 0 评论 -
pat乙级——到底买不买
https://pintia.cn/problem-sets/994805260223102976/problems/994805283241443328思路很简单: 对于要找的每一个字符,去给定的字符串找,找到则把原串字符 变为+,因为相当于这个字符已经用了,不能再次被用了,然后 找到一个后还要及时break掉(因为你这个字符已经匹配上了, 应该去看下一个字符了),防止后面还有相同的字符。#include<bits/stdc++.h>using namespace std;in原创 2020-10-31 11:59:09 · 194 阅读 · 0 评论 -
PAT乙级1038—统计同成绩学生
https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040开始: 把所有成绩都存进数组,需要查找的成绩存进数组,然后去匹配寻找,找到则相应的个数加一。方法太low,双层for循环超时。时间复杂度在n*n看了题解: 成绩是在一个范围内的,创建一个101的数组,每读取一个成绩,相应的下标对应的值就加一,这样在读取的时候就完成了数据的统计,最后想要那个数出现的次数,直接输出对应的数组值就可以,时间复杂原创 2020-10-31 11:26:34 · 67 阅读 · 0 评论 -
pat乙级-1035 插入与归并
1035 插入与归并https://pintia.cn/problem-sets/994805260223102976/problems/994805286714327040思路: 模拟插入与归并排序,看序列满足哪一个。 排序的时候对于每一小段可以用sort来解决。 开始的时候注意复制一遍原始数组,因为要进行两个排序。 一个排序以后会改变原数组的值,所以要复制。代码:#include<bits/stdc++.h>#define MAXN 101using namesp原创 2020-10-31 09:05:06 · 58 阅读 · 0 评论 -
PAT挖掘机技术哪家强-没难度(注意if)
//c错误 #include<bits/stdc++.h>using namespace std;int main(){ int n=0; scanf("%d",&n); int a[n]={0}; for(int i=0;i<n;i++) { int c,d; scanf("%d %d",&c,&d); a[c-1]+=d;//处理编号与数组之间的关系,最后一定要做处理 } int max=a[0]; int jilu=0;原创 2020-10-29 11:14:08 · 130 阅读 · 0 评论 -
PAT乙级—1033旧键盘打字(测试点2不通过)
https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672思路:转大写来判断//测试点2不过的原因是:第一行字符串可能为空,因此不能使用scanf读取,要使用cin.getline #include<bits/stdc++.h>using namespace std;int main(){ string s,s1; getline(cin, s); cin>>s1;原创 2020-10-29 10:36:37 · 132 阅读 · 0 评论 -
PAT乙级—1030 完美数列(运行超时)
此题还有一个测试点没过https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224两个坑:1,用long防止溢出两个10的九次方相乘会溢出。2.运行超时问题要判断。我这个判断不行。要用第二个代码,首先将输入的数字进行sort排序,从小到大。然后设定i,j记录符合的数组位置,count记录符合要求的中间数字的多少,初始为0,i从0~n,j从i+count开始,找到符合要求的j时(M≤mp),计算j-i原创 2020-10-28 20:04:47 · 219 阅读 · 0 评论 -
PAT乙级-旧键盘
两种代码思路 第二种比较常规 但是思路都是小转大然后判断1.#include<bits/stdc++.h>using namespace std;int main() { string s1, s2, ans; cin >> s1 >> s2; for (int i = 0; i < s1.length(); i++) if (s2.find(s1[i]) == string::npos && an原创 2020-10-27 17:38:48 · 55 阅读 · 0 评论 -
PAT乙级-1028 人口普查(注意:结构体string元素之间通过结构体名相互赋值会产生错误这种情况改为char比较好)
/*这题首先需要判断输入的年龄是否合法 first:开始的思路是去计算出真实的年龄,看是否小于2000,还有判断是否迟于现在的日期 在实际计算当中,发现要考虑的条件太多,遂放弃。 end:参考网上代码,年龄合法的话,它应该位于一个区间,只要判断每次输入的数据是否在这个区间内即可 2014 年 9 月 6 日 1814 年 9 月 6日 */#include<bits/stdc++.h>using namespace std;//struct p{// str原创 2020-10-27 16:44:25 · 66 阅读 · 0 评论 -
PAT乙级1027 打印沙漏
首先想吐糟一下这个题,我还没有考虑符号数小于七个的情况就ac了思路很简单1.它给了一个数,我们组成图形的数目是固定的,而且满足1+3x2+5x2+7x2的规律,那么我们就可以计算出剩下的符号数。(for循环找最大满足组成图形的符号数)2.根据最大满足条件的符号数,我们就能画出图形。 1.画的时候分三部分来画 上下对称和中间的那一个 2.上下可以确认行数,我们可以用之前的for循环里的i来当做 行数3.还有一个点就是确认空格数,可以根据for循环里面的值来确认,例如输出上面的图形时,我们第一原创 2020-10-27 15:19:16 · 57 阅读 · 0 评论 -
PAT乙级1026程序运行时间(秒数转换为时间)(值得学习)
https://pintia.cn/problem-sets/994805260223102976/problems/994805295203598336#include<iostream>#include<bits/stdc++.h>using namespace std;int main(){ double a,b; cin>>a>>b; int c=round((b-a)/100); int h=c/360.原创 2020-10-26 23:51:30 · 157 阅读 · 0 评论 -
pat乙级反转链表(好难哦)(没理解代码)
自己写的:(16分)#include<bits/stdc++.h>using namespace std;struct node{ string add; int data; string next;};//结构体数组按照某一项进行排序 bool cmp(node a,node b){ return a.data>b.data;} int main(){ string d; int n,k; cin>>d>>n>>k;原创 2020-10-26 11:18:33 · 92 阅读 · 1 评论 -
PAT乙级1022 D进制的A+B(采用存进数组然后倒序输出)
题目链接: https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344 错因: #include<bits/stdc++.h>using namespace std;int main(){ int a,b,n=0,d=0,result=0,i=0,yu=0; scanf("%d %d %d",&a,&b,&d); n=a+b; if(n == 0) pr原创 2020-10-26 09:33:11 · 65 阅读 · 0 评论 -
pat乙级1017 A除以B(大整数相处 算法要记住)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。代码: #include<bits/stdc++.h> using namespace std;int main(){ string s; int b,t=0,tmp=0;//t存储每一次的输出 tmp存余数 cin>>s>>b; for(int i=0;i<s.length();i++) {原创 2020-10-26 09:28:19 · 57 阅读 · 0 评论 -
pat乙级1017 A除以B(大整数相处 算法要记住)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。代码: #include<bits/stdc++.h> using namespace std;int main(){ string s; int b,t=0,tmp=0;//t存储每一次的输出 tmp存余数 cin>>s>>b; for(int i=0;i<s.length();i++) {原创 2020-10-24 17:56:36 · 67 阅读 · 0 评论 -
pat乙级-1015 德才论(结构体的约束排序)
原题: https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312思路: 建立结构体存储信息难点: 最后对于四个分类好的结构体进行排序,如果排序有约束条件,使用cmp谓词来解决贴代码: #include<iostream>#include<bits/stdc++.h>using namespace std;struct Person{ int id; i原创 2020-10-24 15:16:57 · 89 阅读 · 0 评论 -
pat乙级——1013输出指定的素数(值得学习输出以及判断素数的方法)
给两个数例如2,27则输出第二个素数到第27个素数每十个换行,切两个之间有空格最后一个数后无空格值得学习#include<stdio.h>#include<math.h>int IsPrime(int b); //判断是否为素数int main(){ int M, N, a = 0, b = 2, count = 0; scanf("%d %d", &M, &N); while(a < N){原创 2020-10-22 15:52:52 · 55 阅读 · 0 评论 -
PAT乙级—说反话(参考)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。思路: 先用gets将字符串读取进来,从后往前看,输出一个字符时,把字符前面的地方变成结束字符,下次就可直接用printf输出%s 直接贴代码:#include<stdlib.h>#include<string.h>#include<math.h>int main(){ char str[100]; gets(str + 1); //从str[1]开始读取字符串; st原创 2020-10-17 23:19:57 · 109 阅读 · 0 评论 -
PAT乙级比赛-互评成绩计算
题目描述:代码:#include<iostream>#include<algorithm>#include<cmath>using namespace std;int main(){ int n1=0,n2=0,special=0; int num[101]; float flag[101]; scanf("%d %d",&n1,&n2); //读入数据 //一行数据一处理 for(int i=0;i<n1;i原创 2020-10-16 23:54:02 · 353 阅读 · 0 评论 -
PAT乙级比赛-换个格式输出整数
题目描述: 让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个 不超过 3 位的正整数。例如 234 应该被输出为 BBSSS123 4,因为它有 2 个“百”、3 个“十”、以及个位的 4。直接贴代码了:(注意点:接连输出几个相同的字符可以选择string(Q,'B'))输出的格式只要能对上就行 不管字符型还是int类型#include<iostream>using namespace原创 2020-10-16 22:37:04 · 58 阅读 · 0 评论 -
PAT乙级比赛-成绩排名
题目概述:读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。思路: 此题一出就想着用结构体 有许多细节需要注意,第一次自己写c++ 需要注意 1.不应该使用printf输出一个String类型的字符串 2.用c++的排序时 针对的是结构体里的元素进行排序 所以需 要注意谓词的使用 3.还有题目中并没有说明存多少人,数组尽量开大一些代码:#include<iostream>#include<string>#in原创 2020-10-16 22:10:05 · 281 阅读 · 0 评论 -
PAT乙级 有理数四则运算(求最大公约数值得学习)这题关键就是格式的处理
/*所有的加减乘除其实都很好计算 这个题的难点在于输出格式的确定func函数用来确认输出格式*/#include<iostream>#include<cmath>using namespace std;long long a,b,c,d;//求最大公约数算法void func(long long m,long long n);long long gcd(long long t1, long long t2) { return t2 == 0 ? t1 .原创 2020-10-16 17:45:34 · 79 阅读 · 0 评论 -
PTA乙级-1002 写出这个数
题目概述:读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 n 小于 10100思路: 开始: 对于数据的处理,想用数字直接取余去判断,最后发现 存不了那么大的数字。 解决: 用字符串去存储,累加求和(字符串转数字减去‘0’)解决代码:#include<stdio.h>#include<string.h>int main(){ char c[100000]; int i,n,t=0,sum=0; int a[原创 2020-10-16 15:29:27 · 73 阅读 · 0 评论