0
点赞
收藏
分享

微信扫一扫

计蒜客 — 计数和数数

芷兮离离 2022-02-06 阅读 46


​​https://nanti.jisuanke.com/t/23​​


  • 时间限制 1000ms
  • 空间限制 65536K

“伯爵说”序列如下:1,11,21,1211,111221,…。其​​1​​​读作​​one 1​​​或者​​11​​​。​​11​​​读作​​two 1s​​​或者​​21​​​。​​21​​​读作​​one 2, one 1​​​或者​​1211​​。

输入格式

多组输入,读到文件结束。每组输入给定一个整数 n(1≤n≤30)。

输出格式

输出第 n 个序列。注意,整数序列以字符串的形式表示。

样例输入


6


样例输出


312211


提示

相信你已经看懂了题目,如果没看懂,小提示下,

其实类似于求“斐波那契”数列的第 n 项哦~

解题思路

我是用的结构体做的,一个存每一位的数,另一个存有多少位。类似于斐波那契,首先先打表。

#include <iostream>
using namespace std;
struct node {
int s[4500], n;
}fib[35];
int main()
{
int n, m;
fib[0].s[fib[0].n++] = 1; //第一个序列为1
for (int i = 1; i < 30; i++)
{
m = 0; //记录上个序列每一位的个数
for (int j = 0; j < fib[i - 1].n; j++)
{
m++; //个数加1
if (fib[i - 1].s[j] != fib[i - 1].s[j + 1])
{
fib[i].s[fib[i].n++] = m; //先把位的个数存下来
fib[i].s[fib[i].n++] = fib[i - 1].s[j]; //再把这一位存下来
m = 0; //相邻两项不同,则开始重新计数
}
}
}
while (cin >> n)
{
for (int j = 0; j < fib[n - 1].n; j++)
cout << fib[n - 1].s[j];
cout << endl;
}
return 0;
}



举报

相关推荐

0 条评论