共计 716 个字符,预计需要花费 2 分钟才能阅读完成。
题目粗心:
给定一个 [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;
}
正文完