这题主要是后一个数对前一个数的描述。
第一个是D,第二个就是D1,有1个D的意思。
需要注意的是它描述的是按顺序来的
如D11231, D112213111,D11231有三个1,但是按顺序两个1连续,最后一个1是分开的,所以后面是D112213111。
这里还有一点要注意:数组要开大一点,原以为n<40,10000就够, 提交了,最后一个段错误,用1,40 输出看了一下,到32个的时候 数组长度就要7500多了。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,d;
scanf("%d%d",&d,&n);
char ch[100000];
ch[0] = d+ '0';
ch[1] = '\0';
int j = 0;
char s[100000];
int count = 0;
int length = 1;
int size = 1;
for(int i = 1 ;i < n ;i++)
{
j = 0;
length = 0;
count = 0;
for(int k = j ;ch[k]!='\0';k++){
if(ch[j] == ch[k]){
count++;
if(ch[k+1] == '\0')
{
s[length++] = ch[j];
s[length++] = count + '0';
}
}
else{
s[length++] = ch[j];
s[length++] = count + '0';
j = k;
k--;
count = 0;
}
}
for(int k = 0; k <length; k++){
ch[k] = s[k];
}
ch[length] = '\0';
}
for(int i = 0;ch[i]!='\0';i++)
printf("%c",ch[i]);
printf("\n");
return 0;
}