【模拟】数列

数列

题目

小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
#include
#include
#include
using namespace std;
int n,t,tt,a[50][100001];
int main()
{
	scanf("%d",&n);
	a[1][0]=1;//赋初值
	a[1][1]=1;
	for(int i=2;i<=n;++i)
	{
		memset(a[i],0,sizeof(a[i]));//清空
		t=0;
		tt=a[i-1][1];
		for(int j=1;j<=a[i-1][0];++j)
		{
			if(a[i-1][j]==tt) //表示连续的数字
			    t++;
			else 
			{
				a[i][++a[i][0]]=t;
				a[i][++a[i][0]]=tt;//目前的数字
				tt=a[i-1][j];
				t=1;
			}
		}
		a[i][++a[i][0]]=t;
		a[i][++a[i][0]]=tt;//剩下的数字
	} 
	for(int i=1;i<=a[n][0];++i)
	{
		putchar(a[n][i]+48);//输出
	}
	return 0;
}

你可能感兴趣的:(ssl,模拟)