PAT乙级( Basic Level)1084外观数列 川长思鸟来 2022-02-16 04:23 144阅读 0赞 # 1084外观数列 # **题目描述**:外观数列是指具有以下特点的整数序列: 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 **解题思路**:题目乍一看蛮唬人的,题目描述中把d独立出来很误导人,实际上题目的意思很简单,就是让你输入一个d,也就是第一项的值,之后每一项的值和前一项关联,判定方法就是从第一个数开始,记录之后紧挨着的相同数字出现的个数,并将其存储为ab,其中a是这个数,b是出现个数。(注意这里相同的数一定要是挨在一起的,中间不能出现其他数) # 代码展示 # #include<iostream> #include<string> using namespace std; int main() { string s="";//前一项外观数列 int n,i,j,k; cin>>s>>n; for(i=1;i<n;i++) { string ss="";//当前外观数列 for(j=0;j<s.length();j=k) { int tem=0; for(k=j;k<s.length();k++) { if(s[k]==s[j])tem++;//判断当前数值,与前一个相同则计数加一,否则 else //退出循环,并将相应a,b赋值给ss字符串 break; } ss+=s[j]+to_string(tem);//to_string()函数实现整型转字符串型 } s=ss; } cout<<s; return 0; }
还没有评论,来说两句吧...