HDU 4148 Length of S(n)(字符串)

题目

字符串处理

题意要猜,解析见代码:

/*
这题每个S(n)是描述S(n-1)值
例如:
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和2个1=1211
....
*/

#include <cstdio>
#include<iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct tt
{
    int nu[5050];
    int n;
}a[35];

int main() {
    a[1].n=1;
    a[1].nu[0]=1;
    for(int i=2;i<31;i++){
        int num=1,pre=a[i-1].nu[0],idd=0;
        for(int j=1;j<a[i-1].n;j++){
            if(pre!=a[i-1].nu[j]){
                
                    int tep[10],id=0;
                    while(num!=0){
                        tep[id++]=num%10;
                        num=num/10;
                    }
                    for(int ii=id-1;ii>=0;ii--){
                        a[i].nu[idd++]=tep[ii];
                    }
                    a[i].nu[idd++]=a[i-1].nu[j-1];
                num=1;
                pre=a[i-1].nu[j];
            }
            else {
                num++;
            }
        }
            int tep[10],id=0;
                    while(num!=0){
                        tep[id++]=num%10;
                        num=num/10;
                    }
                    for(int ii=id-1;ii>=0;ii--){
                        a[i].nu[idd++]=tep[ii];
                    }
                    a[i].nu[idd++]=a[i-1].nu[a[i-1].n-1];
        a[i].n=idd;
    }
    int n;
    while(scanf("%d",&n),n)
    {
        cout << a[n].n <<endl;
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/laiba2004/p/3893097.html