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;
    } 
    
  • 相关阅读:
    <!--[if IE 9]>....<!end if-->
    背景颜色设置
    UIImageView 响应UIButton的点击事件
    响应键盘return事件
    iOS 封装数据请求,解析数据(异步)
    UIImageView 圆角
    JS 控制文本框必须输入值才能查询
    MVC4 @Html.Raw()
    JS加成显示
    随机生成人物名称
  • 原文地址:https://www.cnblogs.com/cell-coder/p/12599143.html
Copyright © 2011-2022 走看看