问题描述
s01串初始为"0"
按以下方式变换
0变1,1变01
输入格式
1个整数(0~19)
输出格式
n次变换后s01串
样例输入
3
样例输出
101
数据规模和约定
0~19
——————————————————————————————————————————————
1.递归方法:
先找特殊点(无法递归的值,直接输出):
即0,1,2三个值(2取特殊的原因可以手动递归以下,可以发现若参与递归,后方会多一个0)
找递归原表达式:
依次手写每个数字的01串,向特殊点延伸。。(找规律)
代码:(原谅我那让人嫌弃的递归函数名)
#include <cmath>
#include <cstring>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
void digui(int a)
{
if(a==0)cout<<"0";
else if(a==1)cout<<"1";
else if(a==2)cout<<"01";
else
{
digui(a-2);
digui(a-3);
digui(a-2);
}
}
int main()
{
int n;
cin>>n;
digui(n);
cout<<endl;
return 0;
}
2.后来翻博客的时候,发现还可以用链表结构,
循环操作n次,若原本为0,将该结点的值变为1,如果是1,将前面添加一个结点,值为0
方法很值得肯定:
闲话:被之前数据结构老师手写一堆链表插入欺负怕了,看见STL都怂...