PAT 乙级 1078 / 1084
题目
题解
1078和1084这两道题放在一块写,主要是因为这两道题的解法和做题思路非常相似;之前我做这一类题没有一个固定的套路,想到哪写到哪,在某种程度上就导致代码冗余度高,准确率不够等种种问题;通过这两道题我希望我能够掌握这一类题目的解决方式,并最好可以总结成一个模板,形成一个固定的套路;
这两道题目的本质实际上就是对一个数串或字符串进行连续重复元素的统计,再以某种方式把统计结果输出;因此其中最需要解决的问题就是如何统计重复元素并做记录;
这两道题的解题方式总结如下:
1. 遍历串中的元素,并事先根据题意定义相关统计变量;
2. 在第一层遍历循环中嵌套一层 while 循环,循环条件是当前访问元素是否等于下一个将要访问的元素、相关题设条件;
3. 若等于,则进入循环,统计变量根据题设条件改变,第一层的循环变量自增1;
4. 若不等于,则根据题设条件进行其他操作;
还有一个问题需要再提一下,解题思路一定要灵活,不要囿于格式化的思维模式,比方说题目对一个字符串进行操作,那么我就会把所有的输出都化为字符类型再输出,这就是典型的僵化思维,如果题目没有规定输出格式,那么在统计结束后直接输出整数或浮点类型的结果就可以在很大程度上简化代码;这只是一个例子,主要目的是为了提醒自己思维不要那么死板,在做题过程中一定要灵活。
代码
1078
#include <iostream>
#include <string>
using namespace std; void fun_C () {
string str;
getline(cin, str);
for (int i = ; i < str.size(); i++) {
int cnt = ;
while (str[i] == str[i + ]) {
cnt++;
i++;
}
if (cnt != )
cout << cnt;
cout << str[i];
}
cout << endl;
} void fun_D () {
string str;
getline(cin, str);
for (int i = ; i < str.size(); i++) {
int cnt = ;
while (str[i] >= '' && str[i] <= '') {
cnt = cnt * + int(str[i]) - ;
i++;
}
for (int j = ; j < cnt; j++)
cout << str[i];
if (cnt == )
cout << str[i];
}
cout << endl;
} int main() {
char c = ;
cin >> c;
cin.ignore();
if (c == 'C')
fun_C();
else
fun_D(); return ;
}
1084
#include <iostream>
#include <vector>
using namespace std; int main() {
vector<int> vec, tmp;
int d = , n = ;
int cnt = ;
cin >> d >> n;
vec.push_back(d);
for (int A = ; A < n; A++) {
for (int i = ; i < vec.size(); i++) {
while (vec[i] == vec[i + ] && i < vec.size() - ) {
cnt++;
i++;
}
tmp.push_back(vec[i]);
tmp.push_back(cnt);
cnt = ;
}
vec = tmp;
tmp.clear();
}
for (int i = ; i < vec.size(); i++)
cout << vec[i];
cout << endl; return ;
}
PAT 乙级 1078 / 1084的更多相关文章
- PAT乙级:1084 外观数列 (20分)
PAT乙级:1084 外观数列 (20分) 题干 外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ... 它从不等于 1 的数字 d ...
- PAT 乙级 1078 字符串压缩与解压 (20)
文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表示.如果字符没有重复,就原样输出.例如 ...
- C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- PAT 乙级 1024
题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...
- PAT 乙级 1017
题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...
- PAT 乙级 1015
题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...
- PAT 乙级 1003
题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...
- PAT 乙级 1059
题目 题目地址:PAT 乙级 1059 题解 开始我是从暴力循环的角度考虑这道题,大概计算了一下时间复杂度应该不会超,但是很不幸没有通过,时间超限:之后考虑搜索算法可能优化不太好,因此就把输入的序列先 ...
随机推荐
- RetryException
public class RetryException extends Exception { public TempestRetryException(Throwable e) { super(e) ...
- js——本地存储
1. cookie 容量小:4k,在同源的http请求时携带传输,占用带宽,有日期限制 <!DOCTYPE html> <html lang="en"> & ...
- java对象在内存中的分配
java对象在内存中的分配 http://blog.csdn.net/qq_30753945/article/details/54974899
- postgresql实现插入数据返回当前的主键ID
<insert id="addUser" parameterType="com.liupan.user"> <selectKey keyPro ...
- 多重背包(dp专题)
题目大意:输入n,代表有n种数,接下来n个数代表n种数,再接下来n个数代表每种数有多少个,在输入K,代表用这些数要加成的和 问你是否能加为K,能输出yes,不能输出no 这是一个典型的多重背包问题,可 ...
- 三,JVM 自带命令行工具之JMap
jmap:java内存映像工具 jmap(Memory Map for java ) 命令用于生成堆转储快照(一般被称为headdump 或dump文件) jmap命令格式:jmap [option ...
- java里如何实现对数组中的元素反转[4, 1, 8, 7, 3, 8, 2]变成 [2, 8, 3, 7, 8, 1, 4]
不多说,直接上干货! 给定一个数组,对其进行反转. {3,1,6,5,8,2} --> {2,8,5,6,1,3}; 其实就是头尾元素的位置置换. package zhouls.bigdata. ...
- HTTPS和SSL证书
1. HTTPS工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,(目的是安全的获得对称密钥用户后续传输加密)过程的简单描述如下: a).浏览器讲自己支持的多个加 ...
- 有限状态机在单片机和 Arduino 编程中的应用
有限状态机在单片机和 Arduino 编程中的应用,个人认为在实际中这是一种思想,意味着解决一类问题. 本帖最后由 张飞 于 2015-3-4 20:18 编辑 在单片机编程中,如果在不使用操作系统的 ...
- 解析和操作XML文件
Dom4j工具 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件代码 1,Domj4读取xml文件 ,准备工作:读取整个文档并获取根节点 // ...