首先 描述题目;括号内部是解释(对上一层的藐视)
输入 | 输出 |
1 | 1(一) |
2 | 11(一个一) |
3 | 21(两个一) |
4 | 1212(一个二,一个一) |
5 | 11121112(一个一,一个二,一个一,一个二) |
6 | 31123112(三个一,一个二,三个一,一个二) |
这样例如你输入5就会输出“11121112”;
代码实现:递归
#include<stdio.h>
#include<stdlib.h>
char* Helpcount(char *s, int n)
{
if (n == 1)
return s;
else
{
int count;
char ch[10000] = "0";
char *p = ch;
while (*s != '\0')//计算下一层
{
count = 1;
while (*s == *(s + 1))
{
count++;
s++;
}
*p++ = (char)(count + '0');
*p++ = *s++;
}
return Helpcount(ch, n - 1);//递归
}
}
char *countAandSay(int n)
{
return Helpcount("1", n);//把字符串和数字分开
}
int main()
{
printf("%s\n", countAandSay(7));
system("pause");
return 0;
}
这个递归,数字是减小的但是字符串却是增加的;第一层往最后层计算,最后返回即可。