小S今天给你出了一道找规律题,题目如下: 有如下的数列1,11,21,1211,111221,312211,…… 小S问你这个数列的第N项是多少,而你一头雾水根本找不出规律。 聪明的小R悄悄地告诉你是这样的 1, 上一个数是一个1,写作11 上一个数是两个1,写作21 上一个数是一个2,一个1,写作1211 上一个数是一个1,一个2,两个1,写作111221, ………… 相信聪明的你一定可以解决这个问题。
第一行包括一个正整数N。
一行一个正整数(注意数字可能会唱过长整形,请注意用数组或者字符串存储)
一道模拟题,用数组存一下即可。
#include<cstdio> int n,f[31][100001],t,lt,l; int main(){ scanf("%d",&n); f[1][1]=1;t=1; //初值,以及长度 for(int i=2;i<=n;++i){ lt=0;l=1; for(int j=1;j<=t;++j){ if(f[i-1][j]==f[i-1][j-1]) l++; //统计个数 else if(j-1>0){ //结算 f[i][++lt]=l; f[i][++lt]=f[i-1][j-1]; l=1; } } f[i][++lt]=l; //结算 f[i][++lt]=f[i-1][t]; t=lt; //累计长度 } for(int i=1;i<=t;++i) //输出 printf("%d",f[n][i]); }