这四道题来自 13 年 08 月 30 的 PAT 测试。

代码量不大,思路也比较直接。不过第一题的处理逻辑不太清晰,需要好好把握。稍有不慎就掉进坑里了(很多人被这道 20‘的题坑了一个多小时心慌意乱我会乱说-,-?)。

PAT advanced level 全部源码:请戳

1061. Dating (20)

题意

题意比较模糊,需要仔细对照 Sample 的数据理清思路。给定四个字符串,每个不超过 60 个字符,不含空格。要求从中找到符合如下规定的三个字符(或者它们的位置),并转化成一个时间的表达:

  • 1.依次比较前两个字符串中每个位置的元素,找到第一个相等的字符,且该字符属于[‘A’, ‘G’]的字母,注意大小写敏感。转换成一周七天输出。
  • 2.在 1 中的字符出现之后,继续比较前两个串,找到一个相等的字符,使它属于[‘0’, ‘9’] || [‘A’, ‘N’],同样,大小写敏感。转换成一天 24 小时的小时数输出。
  • 3.比较后两个字符串,找到第一个相等的字母(isalpha()),将它在数组中的位置值转换分钟数输出。

为了便于理解,给出 Sample 数据:

1
2
3
4
5
6
7
8
9
10
Sample Input:

3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm Sample Output: THU 14:04
分析

理清题目的逻辑以后,实现起来是很简单的。

pat1061 源码:请戳

1062. Talent and Virtue (25)

题意

给定一堆人,每个人有三条记录:id,道德值(v),才能值(t)。给出两个值 L 和 H,用作对这堆人的分类。按照如下规则输出排序结果:

  • 0.过滤掉 v 和 t 都小于 L 的人
  • 1.v 和 t 都不小于 H 的人是圣人,属于最高的层级,排序在其他层级之前。
  • 2.v 不小于 H,而 t 小于 H 的人是君子,这个层级排在圣人之后。
  • 3.剩下的人中,v 不小于 t 的人是愚人,层级关系里排第三,排在所有圣人和君子之后。
  • 4.最后剩下的人是小人,是最低的层级。
  • 5.排名时,相同层级的人的排序关系是 1.按照 v+t 的总分 non-increasing 排序;2.按照 v 的分值按 non-increasing 排序;3.找到 id 按 increasing 排序。
分析

题意梳理清楚以后,定制比较函数用 qsort()能很快的实现。

经测试,使用coutcin会超时,改用’printf() scanf()’轻松过。

pat1062 源码:请戳

1063. Set Similarity (25)

题意

题目给出了 N(<=50)个正整数集合(实际上不是真正意义上的 set,有重复数值),每个集合最多存 M(<104)个元素,其中数值范围是 [0, 109]。给出 K 次查询,每次查询条件为两个集合,要求求出两集合的相似度。

这里集合相似度的定义是 Nc/Nt*100%,其中 Nc 为两集合的交集元素数量,Nt 为两集合的并集的元素数量。

分析

使用set给集合去重会超时。利用sort()对数组做排序,然后自行遍历去重是一个不错的方式。计算交集、并集的时候,直接用两个游标对数组遍历进行比较操作,复杂度为 O(M*K)。这种游标遍历的思想,还是很 common sense 的处理流程。

pat1063 源码:请戳

1064. Complete Binary Search Tree (30)

题意

给定一串数据,要求构建完全二叉搜索树。

分析

常规思路是对数据排序,然后递归的构建二叉搜索树(且构建的递归过程要满足完全二叉的树形结构),实现起来稍微有些代码量。

后来@Redow7 给介绍了一种更有趣的方法:

  • 0.对数据排序,等待操作。
  • 1.首先构建好完成二叉树。
  • 2.利用二叉搜索树的中序遍历的有序性,在中序遍历的过程中,将排序好的数据插入其中。

那么难点就降低到了构建完全二叉树。这又让人联想到了最大堆的数组实现:左儿子2*n,右儿子’2*n+1’。对的,数组实现的二叉树就是满足完全二叉树的特点的。于是,使用数组实现的二叉树做迭代的思路就出来了。

pat1064 源码:请戳

 原文地址:http://biaobiaoqi.github.com/blog/2013/08/31/pat-1061-pat-1064/
 版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0

PAT 1061 - 1064 题解的更多相关文章

  1. PAT甲题题解-1061. Dating (20)-字符串处理,水水

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  2. PAT甲题题解-1064. Complete Binary Search Tree (30)-中序和层次遍历,水

    由于是满二叉树,用数组既可以表示父节点是i,则左孩子是2*i,右孩子是2*i+1另外根据二分搜索树的性质,中序遍历恰好是从小到大排序因此先中序遍历填充节点对应的值,然后再层次遍历输出即可. 又是一道遍 ...

  3. PAT Basic 1064

    1064 朋友数 如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它 ...

  4. 2019秋季PAT甲级_C++题解

    2019 秋季 PAT (Advanced Level) C++题解 考试拿到了满分但受考场状态和知识水平所限可能方法不够简洁,此处保留记录,仍需多加学习.备考总结(笔记目录)在这里 7-1 Fore ...

  5. PAT 甲级 1064 Complete Binary Search Tree (30 分)(不会做,重点复习,模拟中序遍历)

    1064 Complete Binary Search Tree (30 分)   A Binary Search Tree (BST) is recursively defined as a bin ...

  6. PAT 乙级 1064 朋友数(20) C++版

    1064. 朋友数(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 如果两个整数各位数字的和是一样的,则被 ...

  7. PAT 1061 判断题(15)(代码)

    1061 判断题(15 分) 判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数 ...

  8. PAT甲题题解-1068. Find More Coins (30)-dp,01背包

    一开始没多想,虽然注意到数据N<=10^4的范围,想PAT的应该不会超时吧,就理所当然地用dfs做了,结果最后一组真的超时了.剪枝啥的还是过不了,就意识到肯定不是用dfs做了.直到看到别人说用0 ...

  9. PAT甲题题解-1108. Finding Average (20)-字符串处理

    求给出数的平均数,当然有些是不符合格式的,要输出该数不是合法的. 这里我写了函数来判断是否符合题目要求的数字,有点麻烦. #include <iostream> #include < ...

随机推荐

  1. Day2:PYC

    一.pyc里装的是预编译后的字节码文件 二.一般存放在”__pycache__“目录 三.当python程序运行时,编译的结果是保存在位于内存中的PyCodeObject中,当Python程序运行结 ...

  2. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一) 写下此文章只为了记录Surging微服务学习过程,并且分享给广大想学习surging的基友,方便广大 ...

  3. Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警

    Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警   日志如下: 2018-06-24T17:16:21.024586+08 ...

  4. UIScrollView(滚动试图)

    UIScrollView(滚动试图) 1.简介 为什么有UISCrollView: 在iOS开发中,由于移动设备的屏幕大小有限,所以不能像PC一样显示很多内容,因此当手机屏幕需要展示的内容较多超出一个 ...

  5. ARCGIS动态画点

    小马哥淡定 原文 ARCGIS动态画点 private void DrawPointOnMap(double x, double y,bool clear) { IMapControl2 pMapCt ...

  6. 初识OpenStack(1)

    初识OpenStack(1) 首先 先来说说我与openstack的渊源吧.那是在上个月中旬.学张的一个朋友给我打电话说让一起来搞一个云平台,当时也不知道是什么.就非常高兴的答应下来了,到了周末,就过 ...

  7. linux中内存泄漏的检測(一)最简单的方法

    什么是内存泄漏 内存泄漏是指程序动态申请的内存在使用完后没有释放,导致这段内存不能被操作系统回收再利用. 比如这段程序,申请了4个字节的空间但没有释放,有4个字节的内存泄漏. #include < ...

  8. python3的函数

    #摘自廖雪峰的程序教程 函数名是变量: 如abs()是一个求绝对值的函数, >>> x = abs(-10) >>> x 10 变量可以指向函数 用f指向函数abs ...

  9. debian 下的vi 上下左右键问题

    小白一只,查了一下vi的版本信息 发现好像是vim 于是把~/.vimrc 变量设置了一下就好了。 将set compatible 设置成set nocompatible . 这是因为系统会默认vim ...

  10. 神经网络 vs 大脑

    海马区域(负责记忆的关键区域) 0. 常见概念 神经递质:neurotransmitter 在突触传递中是担当"信使"的特定化学物质.简称递质. 重要的神经递质有:乙酰胆碱: 1. ...