【模拟】数列
數列
題目大意:
有一個序列,1,11,21,1211,111221,3122111,11,21,1211,111221,3122111,11,21,1211,111221,312211,形如上一個數有x1x_1x1?個x2x_2x2?,x3x_3x3?個x4x_4x4?,把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);//輸出 }總結
- 上一篇: 继承者们演员表 继承者们剧情简介
- 下一篇: 昭昭牵牛星原文 昭昭牵牛星原文和译文