hdu 4148 Length of S(n) (坑爹的规律题)

题意不明确就是让你根据前面的几个式子来找规律,找了我足足两个小时啊!!有点坑!!

S(1)=1, 
S(2)=11,由S(1)从左往右1个1,所以为11;
S(3)=21,由S(2)从左往右2个1所以为21;
S(4)=1211,有S(3)从左往右1个2,1个1,所以为1211;
S(5)=111221,同理1个1,1个2,2个1,所以为111221
S(6)=312211,同理为3个1,2个2,1个1,所以为312211

知道规律了题目就容易解决了!!

代码实现:

#include<stdio.h>
#include<string.h>
int main()
{
    char a[31][10000];
    int b[31],i,j,num,n,len;
    strcpy(a[1],"1");
    b[1]=1;
    for(i=2;i<=30;i++)
    {
        len=0;
        for(j=0;j<b[i-1];)
        {
            num=1;
            while(a[i-1][j]==a[i-1][j+1])
            {
                num++;
                j++;
            }
            a[i][len++]=num+'0';
            a[i][len++]=a[i-1][j];
            j++;
        }
        a[i][len]='\0';
        b[i]=len;
    }
    while(scanf("%d",&n)!=EOF&&n)
    {
        printf("%d\n",b[n]);
    }
    return 0;
}

 

posted on 2013-01-19 22:11  后端bug开发工程师  阅读(642)  评论(0编辑  收藏  举报

导航