题意不明确就是让你根据前面的几个式子来找规律,找了我足足两个小时啊!!有点坑!!
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; }