PAT甲级 模拟题_C++题解
模拟题
PAT (Advanced Level) Practice 模拟题
目录
- 1008 Elevator (20)
- 1042 Shuffling Machine (20)
- 1046 Shortest Distance (20)
- 1051 Pop Sequence (25)
- 1117 Eddington Number (25)
- 1128 N Queens Puzzle (20)
1008 Elevator (20)
#include<cstdio>
int main()
{
int N;
scanf("%d",&N);
int currentfloor = 0;
int nextfloor;
int time = 5 * N;
for (int i = 0; i < N; i++){
scanf("%d", &nextfloor);
if (nextfloor > currentfloor) time += 6 * (nextfloor - currentfloor);
if (nextfloor < currentfloor) time += 4 * (currentfloor - nextfloor);
currentfloor = nextfloor;
}
printf("%d", time);
}
1042 Shuffling Machine (20)
#include<iostream>
#include<string>
using namespace std;
int main()
{
string oldcards[54];
string newcards[54];
for (int i = 0; i < 54; i++){
if (i < 13){
oldcards[i] = "S";
oldcards[i].append(to_string(i+1));
} else if (i < 26){
oldcards[i] = "H";
oldcards[i].append(to_string(i+1-13));
} else if (i < 39){
oldcards[i] = "C";
oldcards[i].append(to_string(i+1-26));
} else if (i < 52){
oldcards[i] = "D";
oldcards[i].append(to_string(i+1-39));
} else {
oldcards[i] = "J";
oldcards[i].append(to_string(i+1-52));
}
}
int n;
cin >> n;
int order[54];
for (int i = 0; i < 54; i++) cin >> order[i];
for (int k = 0; k < n; k++){
for (int i = 0; i < 54; i++)
newcards[order[i]-1] = oldcards[i];
for (int i = 0; i < 54; i++)
oldcards[i] = newcards[i];
}
cout << oldcards[0];
for (int i = 1; i < 54; i++){
cout << " " << oldcards[i];
}
}
1046 Shortest Distance (20)
题目思路
- 所有结点连起来会形成一个环形,每次输入都重新加一遍距离会超时,即使记录sum每次只算一侧也会超时。
- 用dis[i]存储第1个结点到第i个结点的下一个结点的距离,sum保存整个路径一圈的总和值。
- 求得结果就是dis[right – 1] – dis[left – 1]和 sum – dis[right – 1] – dis[left – 1]中较小的那一个
- 注意:输入两个数没有顺序规定,如果左大右小需要交换
- 交换可使用swap函数,许多stl都实现了这一函数,可以用
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int sum = 0, N, M, a, b, temp, d;
scanf("%d",&N);
int distance[N+1] = {0};
for (int i = 1; i <= N; i++){
scanf("%d", &temp);
sum += temp;
distance[i] = sum;
}
scanf("%d", &M);
for (int i = 0; i < M; i++){
scanf("%d%d", &a, &b);
if (a > b) swap(a, b);
d = distance[b-1] - distance[a-1];
printf("%d\n", min(d, sum-d));
}
return 0;
}
1051 Pop Sequence (25)
栈模拟
- 不管是否已经判断出可不可能,要先把输入的序列接收进来。所以开一个数组先用一趟循环接受本次所有输入。
- 按顺序1~n把数字进栈,每进入一个数字,判断有没有超过最大范围
- 超过了说明到此压栈弹栈操作使得栈内元素大于规定容量,break。
- 如果没超过,检查是否需要弹出
- 压栈循环外设置变量 current 记录检查到输入序列的第几个。
- 每次将栈顶元素与输入序列检查到的对应位置是否相等,while相等则一直弹出且current后移。
- 若栈顶元素与序列不符或栈已经弹空,则继续压栈新数字。
- 注意:在while条件中要把!pop.empty()放在&&前,即先检查栈是否为空,否则在栈空时访问pop.top()是非法行为
- 如果压栈弹栈操作始终使得栈容不超过规定值,应当会检查到输入序列的最后,若current没有到达n+1,说明有元素没有被检查到,栈未被弹空,应输出NO,反之输出YES
#include<cstdio>
#include<stack>
using namespace std;
int main()
{
int m, n, k;
scanf("%d%d%d", &m, &n, &k);
for (int i = 0; i < k; i++){
int seq[n+1];
stack<int> pop;
for (int j = 1; j < n+1; j++) scanf("%d", seq+j);
int current = 1;
for (int j = 1; j < n+1; j++){
pop.push(j);
if (pop.size() > m) break;
while (!pop.empty() && pop.top() == seq[current]){
pop.pop();
current++;
}
}
if (current < n+1) printf("NO\n");
else printf("YES\n");
}
return 0;
}
1117 Eddington Number (25)
题目思路
- 在数组中存储n天的公里数,从大到小排序
- i+1 表示了第几天骑车,那么满足
dis[i] > i + 1的最大 i 即为所求
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n, i;
scanf("%d", &n);
int dis[n];
for (i = 0; i < n; i++) scanf("%d", &dis[i]);
sort(dis, dis+n, greater<int>());
for (i = 0; i < n; i++)
if (dis[i] <= i + 1) break;
printf("%d\n", i);
return 0;
}
1128 N Queens Puzzle (20)
题目思路
- 不管是否已经判断出是否为解,要先把输入的序列接收进来。所以开一个数组先用一趟循环接受本次所有输入。
- 对于第j个数字,判断其前输入的数字中是否有在同一行的 seq[j] == seq[k] 和在斜对角线上的 abs(seq[j]-seq[k]) == abs(j-k)
- 不满足改变标记变量break离开检查循环,根据标记变量进行对应输出
- 简化代码:若不满足标记变量不继续进行循环,可将标记变量写入for循环条件。
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int K, n;
scanf("%d", &K);
for (int i = 0; i < K; i++){
bool issolution = true;
scanf("%d", &n);
int seq[n+1] = {0};
for (int j = 1; j < n+1; j++) scanf("%d", seq+j);
for (int j = 1; j < n+1 && issolution; j++){
for (int k = 1; k < j; k++){
if (seq[j] == seq[k] || abs(seq[j]-seq[k]) == abs(j-k)){
issolution = false;
break;
}
}
}
printf("%s", issolution ? "YES\n" : "NO\n");
}
return 0;
}
PAT甲级 模拟题_C++题解的更多相关文章
- PAT甲级 排序题_C++题解
排序题 PAT (Advanced Level) Practice 排序题 目录 <算法笔记> 6.9.6 sort()用法 <算法笔记> 4.1 排序题步骤 1012 The ...
- PAT甲级 链表题_C++题解
链表处理 PAT (Advanced Level) Practice 链表题 目录 <算法笔记> 重点摘要:静态链表 1032 Sharing (25) 1052 Linked List ...
- PAT甲级真题及训练集
正好这个"水水"的C4来了 先把甲级刷完吧.(开玩笑-2017.3.26) 这是一套"伪题解". wacao 刚才登出账号测试一下代码链接,原来是看不到..有空 ...
- 1080 Graduate Admission——PAT甲级真题
1080 Graduate Admission--PAT甲级练习题 It is said that in 2013, there were about 100 graduate schools rea ...
- PAT甲级2019冬季考试题解
A Good In C纯模拟题,用string数组读入数据,注意单词数量的判断 #include<bits/stdc++.h> using namespace std; ; ][]; in ...
- PAT甲级 散列题_C++题解
散列 PAT (Advanced Level) Practice 散列题 目录 <算法笔记> 重点摘要 1002 A+B for Polynomials (25) 1009 Product ...
- PAT甲级 Dijkstra 相关题_C++题解
Dijkstra PAT (Advanced Level) Practice Dijkstra 相关题 目录 <算法笔记>重点摘要 1003 Emergency (25) <算法笔记 ...
- PAT甲级 进制转换题_C++题解
进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...
- PAT甲级 二叉树 相关题_C++题解
二叉树 PAT (Advanced Level) Practice 二叉树 相关题 目录 <算法笔记> 重点摘要 1020 Tree Traversals (25) 1086 Tree T ...
随机推荐
- 1827:【01NOIP提高组】Car的旅行路线
哇这些真题终于正经起来奥 刚看这道题很不自信觉得自己肯定不能建图成功甚至想过用贪心.. 后来一想发现建图还是蛮容易的,AI我是真的蠢 话说一本通真的很坑啊,把原题的保留1位改成了2 我把在洛谷AC的代 ...
- java 封装返回结果实体类 返回结果以及错误信息
public class ResponseMessage { private final static String STATUS_OK = "0"; private final ...
- 【hadoop环境问题】namenode无法启动问题解决
[问题背景] 要在自己的阿里云上搭伪分布式,用来复习和强化hive相关的知识,在执行脚本 sh start-dfs.sh后,jps后: 然后查看name的日志,报错如下: [解决方法] 网上的很多方法 ...
- h5播放rtsp流
最近由于项目上需要一个摄像头在线预览的功能,于是便琢磨了一个小玩意出来分享分享.项目是在win上,合作的人懂js,基于这样的情况,我只选择nodejs作为开发.并未使用php相关. 一开始做这个,我并 ...
- Go 与 JSON
Go 中通过标准库encoding/json.encoding.xml.encoding/asn1和其他库对 JSON.XML.ASN.1 和其他类型的标准的编码和解码提供了良好的支持,这里对使用最多 ...
- Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。
Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛. 用Nginx+Lua(OpenResty)开发高性能Web ...
- Linux -- GCC Built-in functions for atomic memory access
下列内建函数旨在兼容Intel Itanium Processor-specific Application Binary Interface, section 7.4. 因此,这些函数区别于普通的G ...
- 国内强大的API接口文档写作网站showdoc
传送门:https://www.showdoc.cc/ 思思今天使用了一下,真是非常方便,瞬间爱上呀,哈哈. 赶紧去试试吧...
- ubuntu18.04开机提示welcome to emergency mode! after logging in type...的解决办法
开机就是报错,进不了系统. 原因是我的ubuntu电脑绑定了之前的移动硬盘,而我开机的时候并没有插着移动硬盘. 所以解决办法是,在此命令行下,以root用户的身份(我这里默认是root用户),vim ...
- Java基础教程:IDEA单元测试
Java基础教程:IDEA单元测试 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 安装JUnit插件步骤 File-->settings-->Plguins ...