快考pat乙级了,花了十块钱做了一下去年冬天的pat乙级,不难,现在在花ac之后的时间来写文章,默默许愿几天后的也不难,但是我们也要做好准备啊~

B-1 谣言检测仪

分数 15 作者 陈越 单位 浙江大学

喜欢用大图看题目的点这里哦,为你们准备啦

谣言有很多种,本题请你设计一种检测仪,专门针对一类吹牛话术进行验证。有人喜欢吹牛,说自己做一场报告有 N 次掌声。现给定这个人的报告录音文字版,其中如果有掌声,记录中会出现 (zhangsheng) 字样。请你统计一下报告过程中到底出现了多少次掌声,并且与其说出的掌声次数做个比较,来判断这是不是谣言。

输入格式:

输入在第一行给出一个不超过 100 的正整数 N,即某人号称自己收获的掌声次数。

随后给出由英文字母、数字、标点符号(包括 ,.;:!)、空格、回车、以及 (zhangsheng) 组成的报告文本,为不超过 10^5个字符的非空字符串,其中语音记录的文本以 #结尾。

输出格式:

首先输出语音记录中真实的掌声次数。如果真实次数不小于 N,则随后空 1 格输出 True;否则输出 False。

输入样例 1:
3
Hello (zhangsheng). Glad to meet everyone(zhangsheng).
See you (zhangsheng) next time.#
输出样例 1:
3 True
输入样例 2:
3
Hello (zhangsheng). Glad to meet everyone(zhang
sheng). Let me hear your zhangsheng!\#
输出样例 2:
1 False

思路:

一看这道题,要读入含回车的字符串好麻烦,没法使用string直接读入。那只能转c语言里面的getchar(),只需要判断以'#'结尾就行。

其实你硬要使用string读也可以,只是我这样更简单,完全可以在每次读入后做一次检查,然后结束输入就行

代码

#include<bits/stdc++.h>
using namespace std;
char a[100010];
int main(){
int n,i=0;cin>>n;
do{
a[i++]=getchar();
}while(a[i-1]!='#');
string b(a,a+i);
//string c="(zhangsheng)";
int cnt=0;//count(b.begin(),b.end(),'(');没有使用count直接数字符串的功能
while(b.find("(zhangsheng)")!=string::npos){
b.erase(b.find("(zhangsheng)"),12);
cnt++;//使用计数
}
cout<<cnt<<" ";
if(cnt>=n)cout<<"True";
else cout<<"False";
return 0;
}

B-2 一道数学题

分数 20 作者 陈越 单位 浙江大学

设整数 m 和 n 在给定闭区间 [a,b] 内,且满足等式 请你求出 m2+n2的最大值。

喜欢用大图看题目的点这里哦,为你们准备啦

输入格式:

输入给出两个正整数 a 和 b(1<a<b≤3×10^4),为闭区间的两个端点。

输出格式:

在一行中按照以下格式输出:

max( m^2 + n^2 ) = s

其中 s 是题面要求的m2+n2的最大值,m 和 n 分别对应能取到最大值的 m 和 n 的值。

输入样例:

10 100

输出样例:

max( 55^2 + 89^2 ) = 10946

思路:

这题直接无脑暴力破解就行,一点脑子都不用

代码

#include<bits/stdc++.h>
using namespace std; int main(){
int a,b;cin>>a>>b;int maxm=0,maxn=0,maxzhi=0;
for(int m=a;m<b;m++){
for(int n=a;n<=b;n++){
if((n*n-m*n-m*m)*(n*n-m*n-m*m)==1){
if(m*m+n*n>maxzhi){
maxm=m;maxn=n;
maxzhi=m*m+n*n;
}
}
}
}
cout<<"max( "<<maxm<<"^2 + "<<maxn<<"^2 ) = "<<maxzhi;
return 0;
}

B-3 代号大本钟

分数 20 作者 陈越 单位 浙江大学



喜欢用大图看题目的点这里哦,为你们准备啦

在“一年一度喜剧大赛”上有一部作品《代号大本钟》,讲的是二战期间德国情报站里有一位英国间谍,代号“大本钟”。当最后情报站只剩下两个人的时候,站长坚信真正的间谍不是间谍,然后用了一下排除法,那就只有他自己是大本钟了……

现在假设情报站进行了 N 人次排查,最后请你用排除法来查一下,谁是那个“大本钟”?

输入格式:

输入第一行给出一个正整数 N(≤10^4)。随后 N 行,按照排查的时间先后顺序,每行给出一人次排查的结果,格式为:

代号 排查结果

其中 代号 是一个 4 位数字,为被排查的人的编号;排查结果 为 1 表示这人有间谍嫌疑,为 0 表示排除了这人的嫌疑。注意:同一个人可能被排查多次,但无论此前有多少次被列为嫌疑人,本次排查结果为 0 就排除了前面的所有怀疑。

输出格式:

根据排除法,在一行中列出所有被排查的人中有可能是“大本钟”的人的编号。编号按递增序给出,相邻编号间以 1 个空格分隔,行首尾不得有多余空格。

如果只有一个人有嫌疑,则在第二行输出 Da Ben Zhong is found!;如果有多个嫌疑,则输出 There are n suspects.,其中 n 是嫌疑人的个数。题目保证至少有一个人是“大本钟”。

输入样例 1:
10
1234 1
2234 0
3234 1
1234 1
3234 1
2234 0
2234 1
3234 0
1234 0
1234 0
输出样例 1:
2234
Da Ben Zhong is found!
输入样例 2:
10
1234 1
2234 0
3234 1
1234 1
3234 1
2234 0
2234 1
3234 0
1234 0
1234 1
输出样例 2:
1234 2234
There are 2 suspects.

思路:

也不难,按题目要求模拟就行,因为后面哪个只有0,1输入用bool就够了,也没有卡时间

代码

#include<bits/stdc++.h>
using namespace std; int main(){
vector<int>booy;
map<int,bool>xyren;
int n,cnt=0;cin>>n;
for(int i=0;i<n;i++){
int bianhao;scanf("%d",&bianhao);
bool b;cin>>b;
xyren[bianhao]=b;//这个也多用不了多少时间
//xyren.insert(make_pair(bianhao,b));本来想用insert省时间,但是用insert会导致出错,所以还是用重载的[]吧
}
for(auto it=xyren.begin();it!=xyren.end();it++){
if(it->second==1){
cnt++;
booy.emplace_back(it->first);
}
}
int k=booy.size();
for(int i=0;i<k;i++){
printf("%04d",booy[i]);
if(i<k-1)printf(" ");
}
if(cnt==1){
printf("\nDa Ben Zhong is found!");
return 0;
}
printf("\nThere are %d suspects.",cnt);
return 0;
}

B-4 真分数的约分

分数 20 作者 陈越 单位 浙江大学

喜欢用大图看题目的点这里哦,为你们准备啦

真分数是指分子小于分母的分数。对分数进行约分,是指将分子分母共同的因子消去。但还有一种另类的简单约分:直接将分子分母共有的一对数字消去。这种方法大多数情况下都得不到正确的结果,但有时候却也碰巧能对!例如 26/65 = 2/5 就是直接消去 6 的结果。

现给定一个真分数,你的任务是判断它是否能用简单约分方法得到正确结果。注意:如果有多种简单约分的可能,一定按从左到右的顺序约掉数字。

输入格式:

输入在一行中给出一个真分数的分子 a 和分母 b,其间以空格分隔。题目保证 0<a<b≤10^5。

输出格式:

在一行中先后输出这个真分数在简单约分前后的样子。如果两个分数相等,则在两者间加一个 = 号;否则加一个 != 号。格式为 a/b = c/d 或 a/b != c/d。

输入样例 1:
39 195
输出样例 1:
39/195 = 3/15
输入样例 2:
1234 23452
输出样例 2:
1234/23452 != 1/52
输入样例 3:
1234 5678
输出样例 3:
1234/5678 = 1234/5678

思路:

做多了的人都知道,到这题就会变着法子的卡测试点了,不过这次不是卡的时间,卡的有两个点详情看我代码

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n;cin>>m>>n;
string a=to_string(m),b=to_string(n);
for(int i=0;i<a.size();i++){
if(b.find(a[i])!=string::npos){
b.erase(b.find(a[i]),1);
a.erase(i,1);
i--;
}
}
if(a.size()==0)a="0";//坑人;首先是全部删除运行错误,我把它保留
//最后一位,又答案错误。看了很久才看出来是要把它补为0
if(stod(b)>0&&(double)m/(double)n==stod(a)/stod(b))cout<<m<<"/"<<n<<" = "<<stoi(a)<<"/"<<stoi(b)<<endl;
else cout<<m<<"/"<<n<<" != "<<stoi(a)<<"/"<<stoi(b)<<endl;
//输出整数尽量不要使用字符串输出,不然去前导零很麻烦
return 0;
}

B-5 取行李

分数 25 作者 陈越 单位 浙江大学



喜欢用大图看题目的点这里哦,为你们准备啦

一般机场里,航班到达后,旅客们会去到达区的行李传送带那里取自己的行李。现假设有一座特别的机场,每条传送带只有一个取行李的窗口。旅客们必须排好队,逐一到窗口取自己的行李。但是当某人到窗口前,发现行李不是自己的,那人就只好走到队尾去等下一次机会。此时那件行李会一直等在窗口,直到它的主人把它取走。假设每一次认领需要 1 分钟,本题就要求你计算传送带清空需要的时间、以及旅客们的平均等待时间。

例如,假设行李 i 属于旅客 i。行李的到达顺序是 1、2、3,旅客的到达顺序是 2、1、3。则 1 号行李要等 2 分钟才能被主人 1 号旅客取走。这时行李队列中有 2、3,旅客队列中是 3、2。于是 2 号行李还要等 2 分钟才能被 2 号旅客取走,最后 3 号在第 5 分钟取走行李。旅客们的平均等待时间是 (2+4+5)/3≈3.7。

输入格式:

输入首先在第一行给出一个正整数 N(≤10^3)。下一行给出 N 个数字,是 [1,N] 区间内整数的一个重排列,表示旅客队列。这里我们假设行李队列是按 1、2、……、N 有序的,并且行李 i 属于旅客 i。一行中数字间以空格分隔。

输出格式:

在一行中输出传送带清空需要的时间、以及旅客们的平均等待时间(输出小数点后 1 位)。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:
5
3 5 1 2 4
输出样例:
9 6.0

思路:

一看到这题,这不就是为队列准备的题吗?幸好我早有准备,哈哈哈,就不知道考试的时候运气有没有这么好了,一开始我还以为,行李会每隔一个人取(也就是一分钟)就会出来一个,但是它却一直留在那里,哈哈,和现实生活中机场不太一样。还是给我调出来了。

代码

#include<bits/stdc++.h>
using namespace std;
int b[1001]={0};
int main(){
int n;cin>>n;queue<int>a;
for(int i=0;i<n;i++){
int lke;cin>>lke;
a.push(lke);
}
int cnt=0,xli=1;
while(!a.empty()){
cnt++;
int num=a.front();
a.pop();//读入完就把它pop
if(xli!=num){
a.push(num);//不是它就让他到队尾
}
else{
//cout<<num<<" "<<cnt<<endl;//调试用的
b[num]=cnt;
xli++;
}
}
double num=0;
for(int i=1;i<=n;i++){
num+=b[i];
}
cout<<cnt<<" ";printf("%.1lf",num/n);
return 0;
}

都读到这里了,给个推荐呗。如果您有疑问或者有更好的解法欢迎评论~

2022年冬pat乙级考试题目及代码解析附部分错误原因的更多相关文章

  1. PAT——乙级真题1003代码

    #include<iostream> #include<string> using namespace std; int getLength(string str0); int ...

  2. PAT——乙级真题1001代码

  3. PAT——乙级真题1002代码

  4. pat甲级考试+pat1051+1056

    同上一篇博客: 贪心题目我已经刷了将近30道了,由于那几天考驾照就没写,以后有空的时候补过来吧,都在codeblock里 pat的题也刷了点,acwing 的题也刷了点,基本都攒下了.以后也会慢慢补过 ...

  5. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  6. PAT 乙级 1024

    题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...

  7. PAT 乙级 1017

    题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...

  8. PAT 乙级 1015

    题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...

  9. PAT 乙级 1003

    题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...

  10. PAT 乙级 1059

    题目 题目地址:PAT 乙级 1059 题解 开始我是从暴力循环的角度考虑这道题,大概计算了一下时间复杂度应该不会超,但是很不幸没有通过,时间超限:之后考虑搜索算法可能优化不太好,因此就把输入的序列先 ...

随机推荐

  1. 【每日一题】【快慢指针相遇】2022年1月25日-NC3 链表中环的入口结点

    描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null. 答案: /* public class ListNode { int val; ListNode next = ...

  2. 【离线数仓】Day01-用户行为数据采集:数仓概念、需求及架构、数据生成及采集、linux命令及其他组件常见知识

    一.数据仓库概念 二.项目需求及架构设计 1.需求分析 2.项目框架 3.框架版本选型 服务器选型:云主机 服务器规划 三.数据生成模块 1.数据基本格式 公共字段:所有手机都包含 业务字段:埋点上报 ...

  3. view-design table的renderHeader中hover添加checkboxGroup遇到的问题

    示例demo https://codepen.io/sphjy/pen/mdKaQJZ 问题见图 勾选多个复选框 on-change事件返回的数据只有当前点击的这一项,而且设置在checkboxGro ...

  4. 使用WPF或AspNetCore创建简易版ChatGPT客户端,让ChatGPT成为你的私人助理

    前言:前一天写的一个ChatGPT服务端,貌似大家用起来还不是那么方便,所以我顺便用WPF和AspNetCore的webapi程序做个客户端吧,通过客户端来快速访问chatgpt模型生成对话.   1 ...

  5. 洛谷P1434例题分析

    [SHOI2002] 滑雪 题目描述 Michael 喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Mic ...

  6. Web应用怎样获取Access Token?

    1.在联盟创建服务器应用 参考文档:开发准备 2.获取用户级Access Token 2.1 获取code 参考文档:接入华为帐号获取凭证 2.1.1 先按照跳转链接进行配置url https://o ...

  7. [OpenCV实战]33 使用OpenCV进行Hough变换

    目录 1 什么是霍夫变换 1.1 应用霍夫变换以检测图像中的线条 1.2 累加器 1.3 线条检测 1.4 圆环的检测 2 代码 3 参考 1 什么是霍夫变换 霍夫变换是用于检测图像中的简单形状(诸如 ...

  8. react 高效高质量搭建后台系统 系列 —— 请求数据

    其他章节请看: react 高效高质量搭建后台系统 系列 请求数据 后续要做登录模块(主页),需要先和后端约定JSON数据格式,将 axios 进行封装,实现本地的数据模拟 mockjs. Tip:s ...

  9. Zookeeper详解(03) - zookeeper的使用

    Zookeeper详解(03) - zookeeper的使用 ZK客户端命令行操作 命令基本语法 help:显示所有操作命令 ls path:使用 ls 命令来查看当前znode的子节点 -w 监听子 ...

  10. 详解kubernetes五种暴露服务的方式

    部署完服务终将是为了访问,那么kubernetes中service和ingress都可以将集群内部的服务能够支持外部访问.service可以让一组 Pod(称为"后端")为集群内的 ...