>Description 有如下的数列1,11,21,1211,111221,312211,…… 小S问你这个数列的第N项是多少。 聪明的小R悄悄地告诉你是这样的 1, 上一个数是一个1,写作11 上一个数是两个1,写作21 上一个数是一个2,一个1,写作1211 上一个数是一个1,一个2,两个1,写作111221, ………… 相信聪明的你一定可以解决这个问题。
>Input 第一行包括一个正整数N。
>Output 一行一个正整数(注意数字可能会唱过长整形,请注意用数组或者字符串存储)
>Sample Input 6
>Sample Output 312211
对于100%的数据1<-N<=30。
>解题思路 直接按照题意打模拟就可以了。
>代码
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,t; char c; string a[35]; int main() { scanf("%d",&n); a[1]="1"; //a[i]记录第i项的数 for(int i=2;i<=n;i++) { t=1; c=a[i-1][0]; //t记录某串连在一起的相同数字的个数,c记录是哪个数字 for(int j=1;j<a[i-1].size();j++) { if(a[i-1][j]!=c) { a[i]+=(char)t+'0'; a[i]+=c; //加入数列 t=1; c=a[i-1][j]; //换数字 } else t++; //累加 } a[i]+=(char)t+'0'; a[i]+=c; } cout<<a[n]; return 0; }