题目大意:
给定一个[0,9]的数字D和正整数N,第一个数字为D,后面每一个数字都是用来描述前面一个数字所产生的,要求输出第N个数字。比如第一个数字为1,描述为有一个1,那么第二个数字就是数字1和次数1的组合11,依次类推。
算法思路:
这里采用字符串来处理该问题比较方便进行拼接操作,首先第一个数字为输入的D,那么第N个数字就是处理了N-1次后的结果,我们每一次处理使用字符串s来保存,并且每一次都会重新赋值给D作为当前轮次的最终结果,每一次描述处理都需要遍历字符串D,对于位置j的字符,需要找到第一个和它不相等的字符的位置k,同时记录D[j]出现的次数num,这样就得到了当前字符D[j]的描述,然后将D[j]和num添加到字符串s中,并且更新j的位置为k,直到循环结束。
注意点:
- 1、当前字符位置j的更新得在字符串拼接操作之后进行。
提交结果:
AC代码:
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
int N;
string D;
cin>>D>>N;
for(int i=0;i<N-1;++i){
// 处理N-1次
string s;
for(int j=0;j<D.size();){
int num = 0;// 当前字符D[j]的个数
int k = j;// 记录第一个与D[j]字符不相等的位置
while(k<D.size()) {
if(D[j]==D[k]){
++num;
}else{
break;
}
++k;
}
// 获得当前字符D[j]和其出现的次数
s += D[j];
s += to_string(num);
j = k;
}
D = s;
}
cout<<D;
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。