PAT
文章平均质量分 75
本专栏全为PAT练习习题个人题解与理解
小岛上的盛夏
这个作者很懒,什么都没留下…
展开
-
PAT 乙级 知识点汇总 (持续更新)
文章目录1.未知循环次数2.字符串与数字相互转换第一种:sscanf()和sprintf():第二种:str1[i]-'0'ASCII码表:3.整型数中查找数字个数组成的新数4.字符串长度,与数字一起输入(输入带空格)5.整数相除的四舍五入,保留小数点1.未知循环次数参考1016 部分A+B(15 分): 用while(a!=0)2.字符串与数字相互转换第一种:sscanf()和sprintf():(1)sscanf(str,"%d",&n):将str字符串以%d的格式传给n原创 2020-11-08 20:49:16 · 2903 阅读 · 0 评论 -
PAT 乙级 1072 开学寄语 (20分)---[bool数组判断,flag,输入个数不确定,数值比较]
1072 开学寄语 (20分)下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面、理发、整衣,然后思过、读书、锻炼、明智、开悟、精进。而后必成大器也!本题要求你写个程序帮助这所学校的老师检查所有学生的物品,以助其成大器。输入格式:输入第一行给出两个正整数 N(≤ 1000)和 M(≤ 6),分别是学生人数和需要被查缴的物品种类数。第二行给出 M 个需要被查缴的物品编号,其中编号为 4 位数字。随原创 2020-12-03 17:15:46 · 149 阅读 · 0 评论 -
PAT 乙级 末尾空格输出问题
文章目录1.if( i < n-1):根据i确定输出范围2.有值才输出空格,用次数!=0判断1.if( i < n-1):根据i确定输出范围参考:1008 数组元素循环右移问题(20分)//先输出内容,再输出空格for(int i = 0; i < n-m; i++){ cout<<a[i]; if( i < n-m-1){//2.注意下标 cout<<" "; } }//先确定空格,再输出内容 for(int i =原创 2020-12-02 11:54:56 · 181 阅读 · 0 评论 -
PAT 乙级 常用输入方式
1.参考:1016 部分A+B(15分)1.多个数字输入scanf("%d%d%d%d",&a,&da,&b,&db);2.字符串跟数字一起输入string a,b;int da,db;cin>>a>>da>>b>>db;3.字符数组跟字符(数字)一起输入,带空格char a[20],b[20];char da,db;scanf("%s %c %s %c",a,&da,b,&db);原创 2020-12-02 10:29:36 · 186 阅读 · 0 评论 -
PAT 乙级 常用函数
文章目录1.字符串,字符数组,数字之间的转换2.输入方式3.字符串判断:大小写,数字1.字符串,字符数组,数字之间的转换1.str.c_str() string转换为字符数组,可以用printf输出。2.stoi(str) 将string转换为数字串,直到遇到第一个非法字符为止。需要首字符是数字或者空格,否则返回错误。3.atoi(str) 将string转换为数字串,直到遇到第一个非法字符为止。首字符为非法字符时,输出0。4.to_string() 将数值型转换为string。需要包含头文件s原创 2020-12-01 18:03:56 · 252 阅读 · 0 评论 -
PAT 乙级 1054 求平均值 (20分)---【字符数组,数字转换,if...else】
1054 求平均值 (20分)本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。输入格式:输入第一行给出正整数 N(≤100)。随后一行给出 N 个实数,数字间以一个空格分隔。输出格式:对每个非法输入,在一行中输出 ERROR: X is not a legal number,其中 X 是输入。最后在一行中输出原创 2020-12-01 17:58:35 · 120 阅读 · 0 评论 -
PAT 乙级 1081 检查密码 (15分)---【if...else 字母,数字匹配函数】
检查密码 (15分)本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。输入格式:输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。输出格式:对每个用户的密码,在一行中输出系统反馈信息,分以下5种:如果密码合法,输出Your password is wan mei.;如果密码太短,不论合法原创 2020-12-01 16:28:49 · 81 阅读 · 0 评论 -
PAT 乙级 1051 复数乘法 (15分)---【浮点数比较大小,fabs() 】
注意:0.前提是保存两位小数1.判断a是否为0.00 if(fabs(a)<=0.001) { printf("0.00"); }2.判断b是否为0.00;负数,正数#include<bits/stdc++.h>using namespace std;int main(){ double r1,r2,p1,p2; cin>>r1>>p1>>r2>>p2; double a,b; a = r1*r2*cos(p.原创 2020-12-01 12:23:02 · 114 阅读 · 0 评论 -
PAT 乙级 1086 就不告诉你(15 分)---【数组反转】
思路:1.利用数组反转函数,将int转化为string(to_string)2.reverse(s.begin(),s.end())反转,s.end()是最后一位的下一位3.再将string(stoi())转化为int型输出注意:最后输出是数字!代码:#include<bits/stdc++.h>using namespace std;int main(){ int a,b; cin>>a>>b; int c=a*b; //int.原创 2020-11-26 20:31:03 · 147 阅读 · 0 评论 -
PAT 乙级 1095 解码PAT准考证 (25 分)
#include <iostream>#include <vector>#include <unordered_map>#include <algorithm>using namespace std;struct node { string t; int value;};bool cmp(const node &a, const node &b) { return a.value != b.value ?原创 2020-11-26 19:33:20 · 83 阅读 · 0 评论 -
PAT 乙级 1094 谷歌的招聘 (20分)---【素数 字符串】
自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921… 其中粗体标出的 10 位数就是答案。本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。输入格式:输入在第一行给出 2 个正整.原创 2020-11-26 17:45:47 · 649 阅读 · 0 评论 -
PAT 乙级 1092 最好吃的月饼 (20分)---【结构体/数组 求和 找最值】
改进前:#include<bits/stdc++.h>using namespace std;struct Moon { int total; int s;};int main(){ int n;//月饼种类 int m;//参与城市 scanf("%d%d",&n,&m); Moon moon[m][n]={}; Moon sum[n]={}; for(int i = 0; i < m; i++){ for(int j = 0;原创 2020-11-24 21:52:55 · 131 阅读 · 0 评论 -
PAT 乙级 1091 N-自守数(15分)---【结构体 二维循环】
思路:1.判断末尾数是否相等,不确定的是取模%几位,所以要确定每个数的取模数2.所以,采用结构体,存放每个数的同时,存放他们的每次取模数3.取模数两种取法:①本身%10(100/1000)=本身,则取模数为10(100/1000);if(num[i].k %10 == num[i].k) { num[i].total=10; }②本身的范围if(1<=num[i].k && num[i].k<10) { num[i].total=10; }.原创 2020-11-23 21:10:07 · 110 阅读 · 0 评论 -
PAT 乙级 1004 成绩排名(20分)---【结构体,最大最小值问题】
思路:1.定义一个结构体,存储学生信息2.定义一个max,定义最大值下标;定义一个min,定义最小值下标;3.输出最大最小值下标对应的信息代码:#include<bits/stdc++.h>using namespace std;struct student{ char name[11]; char sno[11]; int score;};int main(){ int n; scanf("%d",&n); student stu[n]; fo.原创 2020-11-23 13:18:03 · 128 阅读 · 0 评论 -
PAT 乙级 1010 一元多项式求导 (25分)---【数组技巧】
思路:1.开数组,范围是题目中的1000再多一点,用下标代表指数,其值代表系数;2.while(…!=EOF),ctrl+z退出输出3.从下标小到大去求导4.记录系数不为0的次数5.考虑特殊情况,次数为0,则直接输出“0 0”6.不为0,输出系数与指数注意点:1.求导时,要从下标小的开始,因为如果从大的开始,下面的会用到其值(这里要使用原来的值,可此时已经改变了);所以从小的开始,下面不是会使用其值,而是改变其值,所以不影响。求导后,要另原来的值系数为0,防止后续可能覆盖不成功!(.原创 2020-11-22 17:50:59 · 219 阅读 · 0 评论 -
PAT 乙级 1018 锤子剪刀布 (20分)---【map 字符与数字相关】
输入样例:10C JJ BC BB BB CC CC BJ BB CJ J输出样例:5 3 22 3 5B B思路: 1.利用结构体设置两个变量,为甲、乙的手势 2.输入甲乙手势 3.记录甲赢输的次数(即对应乙输赢的次数)和平的次数 4.利用map<char,int>分别存储甲乙使用'C','J','B'的所赢次数,键为字符,值为int次数。 5.考虑甲乙所有输出可能,存储对应的甲赢,甲输,平的次数,以及每次各自赢的时候所使用的字符的次数。 6..原创 2020-11-20 19:50:16 · 120 阅读 · 0 评论 -
map的用法集中
参考:https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html原创 2020-11-20 14:42:11 · 67 阅读 · 0 评论 -
PAT 乙级 1002 写出这个数 (20分)---【字符串,数组】
思路: 1.因为输入int数字是<=100位,用string字符串输入 2.再循环把每个数字(字符串类型)转换成int类型(-48/‘0’);与此同时做总和运算sum 3.写一个字符串数组,存放拼音char str[10][10]/string str[10] 4.把sum(int)转换成string(to_string(sum)),遍历sum中每位,输出对应下标上的拼音。代码:#include<bits/stdc++.h>using namespace std;in.原创 2020-11-19 21:13:25 · 98 阅读 · 0 评论 -
PAT 乙级 1012 数字分类 (20分)---【数组】
输入样例 1:13 1 2 3 4 5 6 7 8 9 10 20 16 18输出样例 1:30 11 2 9.7 9输入样例 2:8 1 2 4 5 6 7 9 16输出样例 2:N 11 2 N 9思路1: 1.一次性输完实例,再遍历查找 2.把每类符合的先存到另外的数组中,再对每对数组进行计算注意点1:1.数组初始化要为0,后续计算会出错!int b_a2[n]={};或者 int b_a2[n]={0};2.注意计算A2类的次数,以及每类的次数。不能拿a1…初.原创 2020-11-17 20:38:01 · 97 阅读 · 0 评论 -
PAT 乙级 1008 数组元素循环右移问题 (20分)---[题目严谨问题?,输出空格,数组移动,输出不同段数“m=m%n“]
图解过程:思路1: 1.按顺序输出 2.用另一数组b[n]存储,作为中间变量,a[n]前面的改了,a[n]就改了,所以找新的数组进行存储! (这里题目中说不能取新的数组,可以忽略不计!)代码1:#include<bits/stdc++.h>using namespace std;int main(){ int n; int m; cin>>n>>m; m=m%n;//!!!!! int a[n]; int b[n]; fo.原创 2020-11-16 22:09:25 · 155 阅读 · 0 评论 -
PAT 乙级 1026 程序运行时间 (15分) --- [整数除法得全值,四舍五入]
四舍五入思路一:#include<bits/stdc++.h>using namespace std;int main(){ double c1,c2; scanf("%lf%lf",&c1,&c2); double c = c2-c1; int time = round(c/100);//四舍五入 (round(c/100)是double型) int h,m,s; h=time/3600; m=time%3600/60; s=time%60; pri.原创 2020-11-08 20:49:30 · 82 阅读 · 0 评论 -
PAT 乙级 1016 部分A+B (15分)---[求整数中某数字的个数---取模]
思路 1.怎么进行循环? 采用while(!=0) 2.怎么查找相应的da,db? 通过%10取模进行判断,再/10进行下一次循环 3.怎么进行求和(求pa,pb)? 每一次要*10(上升位数)+da.#include<bits/stdc++.h>using namespace std;//取模找数字 int main(){ int a,b; int da,db; scanf("%d%d%d%d",&a,&da,&b,&db);.原创 2020-11-08 15:32:51 · 98 阅读 · 0 评论 -
PAT 乙级 1039 到底买不买 (20分) [map映射/数组]
文章目录1039 到底买不买 (20分)思路:第一种做法:第二种做法:不同点:1039 到底买不买 (20分)小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,原创 2020-06-18 22:35:04 · 134 阅读 · 0 评论 -
PAT 乙级 1046 划拳 (15分) 简单 结构体 C++
1046 划拳 (15分)划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。输入格式:输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为:甲喊 甲划 乙喊 乙划其中喊是喊出的数字,划是划出的数字,均为不超过 10原创 2020-06-19 20:11:05 · 199 阅读 · 0 评论 -
PAT 乙级 1047 编程团体赛 (20分) 最值问题
1047 编程团体赛 (20分)编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。现给定所有队员的比赛成绩,请你编写程序找出冠军队。输入格式:输入第一行给出一个正整数 N(≤10的四次方),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。输出格式:在一行中输出冠军队的编号和总成绩原创 2020-06-21 10:05:24 · 104 阅读 · 0 评论 -
PAT 乙级 1093 字符串A+B (20分) python 字符串去掉重复值原序输出
1093 字符串A+B (20分)给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。输入格式:输入在两行中分别给出 A 和 B,均为长度不超过 106 的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。输出格式:在一行中输出题面要求的 A 和 B 的和。输入样例:This is a sample testto show you_How it works输出样例原创 2020-06-21 14:48:25 · 194 阅读 · 0 评论 -
PAT 乙级 1056 组合数的和 (15分) C++ 两位数组合的和公式
1056 组合数的和 (15分)给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。输入格式:输入在一行中先给出 N(1 < N < 10),随后给出 N 个不同的非 0 个位数字。数字间以空格分隔。输出格式:输出所有可能组合出来的2位数字的和。输入样例:3 2 8 5输出样例:330思路:方法一: 1原创 2020-06-21 17:23:52 · 122 阅读 · 0 评论 -
PAT 乙级 1042 字符统计 (20分)字母大小写转换 字母排序
1042 字符统计 (20分)请编写程序,找出一段给定文字中出现最频繁的那个英文字母。输入格式:输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。输出格式:在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。输入样例:This is a simple TEST. There ARE number原创 2020-06-23 18:12:24 · 133 阅读 · 0 评论 -
PAT 乙级 1001 害死人不偿命的(3n+1)猜想 (15分) 简单
做法一(JAVA&C++):import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int sum = 0; while(num != 1) { if (num .原创 2020-11-06 21:29:11 · 59 阅读 · 0 评论 -
PAT 乙级 1036 跟奥巴马一起编程 (15分) 图形输出
1036 跟奥巴马一起编程 (15分)美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式: 输入在一行中给出正方形边长 N(3≤N≤20)和组成正方形边的某种字符 C,间隔一个空格。输出格式: 输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的.原创 2020-11-06 21:52:06 · 67 阅读 · 0 评论 -
PAT 乙级 1032 挖掘机技术哪家强 (20分)---简单模拟 (数组存储)
#include<bits/stdc++.h>using namespace std;const int n = 1e5+10;int sum[n]={0};//初始化数组,防止误差 int main(){ int num; scanf("%d",&num); int id;//学校编号 int score;//分数 for(int i = 0; i < num; i++){ scanf("%d%d",&id,&score); sum[.原创 2020-11-07 11:01:46 · 94 阅读 · 1 评论 -
PAT 乙级 1011 A+B 和 C (15分) 简单模拟 ---二维字符数组
#include<bits/stdc++.h>using namespace std;//先存储,后输出 int main(){ int T; scanf("%d",&T); long long a; long long b; long long c; char result[20][10];//尽可能大一些 for(int i = 1; i <= T; i++){ scanf("%lld%lld%lld",&a,&b,&c);.原创 2020-11-07 12:30:48 · 108 阅读 · 0 评论