zoukankan      html  css  js  c++  java
  • PAT乙级:1084 外观数列 (20分)

    PAT乙级:1084 外观数列 (20分)

    题干

    外观数列是指具有以下特点的整数序列:

    d, d1, d111, d113, d11231, d112213111, ...
    
          
        
    

    它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对应 d1)和 1 个 1(对应 11),所以第 3 项就是 d111。又比如第 4 项是 d113,其描述就是 1 个 d,2 个 1,1 个 3,所以下一项就是 d11231。当然这个定义对 d = 1 也成立。本题要求你推算任意给定数字 d 的外观数列的第 N 项。

    输入格式:

    输入第一行给出 [0,9] 范围内的一个整数 d、以及一个正整数 N(≤ 40),用空格分隔。

    输出格式:

    在一行中给出数字 d 的外观数列的第 N 项。

    输入样例:

    1 8
    
          
        
    

    输出样例:

    1123123111
    

    思路

    双指针法。思路写在注释中。

    code

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int main(){
    	vector<int> vec;
    	int d=0,steps=0;
    	cin>>d>>steps;
    	vec.push_back(d);
    	for(int i=0;i<steps-1;i++){
    		int p=0,q=0;//双指针 
    		vector<int> temp;//临时存储 
    		vec.push_back(0);//哨兵,可以节省特判步骤 
    		while(p<vec.size()){
    			if(vec[p]!=vec[q]){//p和q指向的数据不相同,说明已经到临界点了 
    				temp.push_back(vec[q]);//将数据放进数组 
    				temp.push_back(p-q);//将个数放进数组 
    				q=p;//更新q指针的位置 
    			}
    			p++;//p指针一直往前走 
    		}
    		vec=temp;
    	}
    	for(int values:vec) cout<<values;
    	return 0;
    } 
    
  • 相关阅读:
    Xshell4连接,Linux系统中文显示乱码解决办法
    Linux系统英文切换中文
    解决VM安装VMTools后错误提示,实现文件共享
    v
    如何安装VM Tool软件包
    Jbpm工作流表补数记录
    【转】Informix数据表结构分析资料整理之约束查询代码
    storm源码之storm代码结构【译】
    Python学习笔记第一天
    python 连接 redis cluster 集群二种方法
  • 原文地址:https://www.cnblogs.com/cell-coder/p/12599143.html
Copyright © 2011-2022 走看看