设为首页 加入收藏

TOP

2022年冬pat乙级考试题目及代码解析附部分错误原因(一)
2023-07-23 13:38:37 】 浏览:82
Tags:2022年冬 pat 解析附

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


更新
map使用insert插入如果键已存在,插入时不是覆盖而是忽略:C++ map容器插入具有相同键的键值对的覆盖问题

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] 内,且满足等式 image请你求出 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 作者 陈越 单位 浙江大学
image
喜欢用大图看题目的点这里哦,为你们准备啦

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

现在假设情报站进行了 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",&
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Openfoam UPstream类探索(一) 下一篇前缀和与二维前缀和

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目