推荐一个网站:N诺 https://www.noobdream.com/
似乎很多高校的真题都有诶,大家可以去试一试!
题目描述:
串只包含0或者1,给定一个数字,输出以此为长度的01串不含连续1的串的个数。
如输入3,则输出5,因为长度为3的01串不含连续1的串包括000, 001, 010, 100, 101。
输入输出格式:
输入描述:输入一个整数N(N<=20)
输出描述:输出结果
解题思路:一
列举可以观察发现,
输入0 输出1 //有0
输入1 输出2 //有1 0
输入2 输出3 //有00 01 10
输入3 输出5 //有000, 001, 010, 100, 101
输入4 输出8 //有0000,0001,0010,0100,1000,1010,1001,0101
这样看就很明显的斐波那契数列了吧,递归解决!
#include<bits/stdc++.h>//c++万能头文件
using namespace std;
int fab(int n){
if(n==0)return 1;
if(n==1)return 2;
if(n>=2)return fab(n-1)+fab(n-2);
}
int main(){
int n,result;
cin>>n;
result=fab(n);
cout<<result;
return 0;
}
解题思路:二
申请一个数组存储斐波那契数列:
#include<iostream>
using namespace std;
int fun(int n){
int a[25];
a[1]=2;
a[2]=3;
for(int i=3;i<25;++i){
a[i]=a[i-1]+a[i-2];
}
return a[n];
}
int main(){
int n,result;
cin>>n;
result=fun(n);
cout<<result;
return 0;
}
解题思路:三
申请一个dp数组存储斐波那契数列规则:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int dp[25];
dp[0] = 1;
dp[1] = 2;
for(int i = 2; i <= n; i++){
dp[i] = dp[i - 2] + dp[i - 1];
}
printf("%d\n", dp[n]);
}
解题思路:四 若想不到斐波那契数列
#include <iostream>
#include <set>
using namespace std;
set<string> st;
void helper(string s, int l, int n) {
if(l==n) {//长度为1
st.insert(s);
return;
}
if(s.back()=='1')//1后只能接0
helper(s+'0', l+1, n);
else {//0后可接0,1
helper(s+'0', l+1, n);
helper(s+'1', l+1, n);
}
}
int main() {
int n;
cin >> n;
string s;
helper(s, 0, n);
cout << st.size() << endl;
return 0;
}
set集合容器:加头文件#include
实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,
它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,
而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与有字数的高度相等,
这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。
set的各成员函数列表如下:
begin()–返回指向第一个元素的迭代器
clear()–清除所有元素
count()–返回某个值元素的个数
empty()–如果集合为空,返回true
end()–返回指向最后一个元素的迭代器s.back()//最后一元素
equal_range()–返回集合中与给定值相等的上下限的两个迭代器
erase()–删除集合中的元素
find()–返回一个指向被查找到元素的迭代器
get_allocator()–返回集合的分配器
insert()–在集合中插入元素
lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()–返回一个用于元素间值比较的函数
max_size()–返回集合能容纳的元素的最大限值
rbegin()–返回指向集合中最后一个元素的反向迭代器
rend()–返回指向集合中第一个元素的反向迭代器
size()–集合中元素的数目
swap()–交换两个集合变量
upper_bound()–返回大于某个值元素的迭代器
value_comp()–返回一个用于比较元素间的值的函数
一些c++头文件
#include
#include
#include
#include
#include
#include<string.h>
#include
#include <stdio.h>
#include <math.h>
#include<stdlib.h>
就这样!