【模拟】数列

    xiaoxiao2023-10-18  159

    数列

    题目大意:

    有一个序列, 1 , 11 , 21 , 1211 , 111221 , 312211 1,11,21,1211,111221,312211 1,11,21,1211,111221,312211,形如上一个数有 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3 x 4 x_4 x4,把x连起来即为当前数

    原题:

    题目描述

    小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<cstdio> #include<cstring> #include<iostream> using namespace std; int n,k,l,a[2][10005]; int main() { scanf("%d",&n); a[1][0]=1;//初值 a[1][1]=1; for (int i=2;i<=n;++i) { memset(a[i&1],0,sizeof(a[i&1]));//清空 k=0; l=a[(i+1)%2][1]; for (int j=1;j<=a[(i+1)%2][0];++j) if (a[(i+1)%2][j]==l) k++;//计算连续个数 else { a[i&1][++a[i&1][0]]=k;//记录 a[i&1][++a[i&1][0]]=l; l=a[(i+1)%2][j];//更新 k=1; } a[i&1][++a[i&1][0]]=k;//剩下的 a[i&1][++a[i&1][0]]=l; } for (int i=1;i<=a[n&1][0];++i) putchar(a[n&1][i]+48);//输出 }
    最新回复(0)