题目粗心:

给定一个[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;}