Length of S(n) hdu4148 水题

来源:互联网 发布:镜片清洗液 知乎 编辑:程序博客网 时间:2024/06/06 15:40

http://acm.hdu.edu.cn/showproblem.php?pid=4148

此题的规律就是…… 

s(1)=1

s(2)=11 (表示s(1)有1个1)

s(3)=21(表示s(2)有2个1)

s(4)=1211(表示s(3)有1个2,1个1)

……

#include <iostream>#include <string>using namespace std;#define N 31string s[N];void init(){ //初始化,按规律写出30个串。s[0]="1";int i,j,k;char c;for (i=1;i<N;i++){s[i]="";c=s[i-1][0]; //表示数字k=1; //统计个数for (j=1;j<s[i-1].length();j++){if (c!=s[i-1][j]){ //遇到不一样的数字时就添加s[i].append(1,k+48); //先将个数加进去s[i].append(1,c);  //再加数字k=1;c=s[i-1][j];}else k++; //一样时,个数加加。}s[i].append(1,k+48);s[i].append(1,c);}}int main(){#ifndef ONLINE_JUDGEfreopen("Fin.txt","r",stdin);#endifint n;init();while (scanf("%d",&n)!=EOF&&n)printf("%d\n",s[n-1].length());return 0;}