【模拟】数列

    xiaoxiao2023-10-30  160

    题目描述

    小S今天给你出了一道找规律题,题目如下: 有如下的数列1,11,21,1211,111221,312211,…… 小S问你这个数列的第N项是多少,而你一头雾水根本找不出规律。 聪明的小R悄悄地告诉你是这样的 1, 上一个数是一个1,写作11 上一个数是两个1,写作21 上一个数是一个2,一个1,写作1211 上一个数是一个1,一个2,两个1,写作111221, ………… 相信聪明的你一定可以解决这个问题。

    输入

    第一行包括一个正整数N。

    输出

    一行一个正整数(注意数字可能会唱过长整形,请注意用数组或者字符串存储)

    输入样例
    6
    输出样例
    312211

    说明

    对于100%的数据1<-N<=30。

    思路

    说实话第一次看题还懵掉了

    #include<Iostream> #include<Cstring> #include<Cstdio> using namespace std; string A[200250]; int n; int main() { scanf("%d",&n); A[1]='1'; for(int i=2;i<=n;++i) { int k=-1; while((++k)<A[i-1].size()) { char l=A[i-1][k];//某数 int r=k;// while(A[i-1][k]==l && k<A[i-1].size())++k;//数有多少个 --k,r=k-r+1;// string s=""; while(r) l=(r%10)+48,r/=10,s=l+s; A[i]=A[i]+s+A[i-1][k]; } } cout<<A[n]<<endl; return 0; }
    最新回复(0)