注册 登录
编程论坛 C语言论坛

大佬们,这题思路是什么

a993521334 发布于 2019-11-03 15:05, 934 次点击
二、报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其 前五项如下:
 
1.     1 2.     11 3.     21 4.     1211 5.     111221
 
1 被读作 "one 1"  ("一个一") , 即 11。 11 被读作 "two 1s" ("两个一"), 即 21。 21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。
 
 
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。 注意:整数顺序将表示为一个字符串。
 
示例 1: 输入: 1 输出: "1"
 
示例 2: 输入: 4 输出: "1211"
 
要求输入一个正整数,输出对应报数的字符串。
1 回复
#2
rjsp2019-11-04 10:01
程序代码:
#include <stdio.h>
#include <string.h>

void next( char s[static 4463] )
{
    char t[4463];
    char* q = t;

    char pre = s[0];
    char count = '0';
    for( char* p=s; ; ++p )
    {
        if( *p == pre )
            ++count;
        else
        {
            *q++ = count;
            *q++ = pre;
            pre = *p;
            count = '1';
        }

        if( *p == '\0' )
            break;
    }
    *q = '\0';

    memcpy( s, t, sizeof(t) );
}

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    char s[4463] = "1";
    for( unsigned i=1; i!=n; ++i )
        next( s );
    printf( "%s\n", s );
}
1