通过这次的周赛让我受益颇多,这次的题目都是平常练习题目的变形,这次的竞赛是十分有意义的,加强对练习题的强化。
两道模拟题:
目录
1.熊孩子拜访
2.走楼梯
题目描述
已知存在一个长度为n的整数序列A,A中所有元素通过从大到小的顺序进行排序,现在执行一段序列,请你找到A序列里面的倒置序列如果A序列中不存在倒置序列,输出0 0。
思路:从前往后找到a[i]>a[i+1]的位置,然后再找到a[i]
题目描述 现在有一截楼梯,根据你的腿长,你一次能走1级或者两级楼梯,已知你要走n阶楼梯才能走到你的目的地,请你算出方案数。 样例输入1 4 样例输出1 5 样例输入2 5 样例输出2 8 斐波拉数列的变形,我们可以发现,f(i)=f(i-1)+f(i-2),用循环模拟递归。因为数据范围比较大,int无法通过,需要开long long。 如果此题目改成每次可以往前迈1,2,3,也是可以继续模拟的,我们可以发现f(i)=f(i-1)+f(i-2)+f(i-3),(i>=4),代码如下: #include #include #include using namespace std; typedef long long ll; int main() { int n; cin>>n; ll f1=1,f2=2,f3=3,f; if(n<=3) cout< else { for(int i=4;i<=n;i++) { f=f1+f2+f3; f1=f2; f2=f3; f3=f; } cout< } return 0; } 我们可以用递归的方法,但是递归需要的存储空间太大,运行不出,只能用模拟递归方法。 如果n的值比较小,那么: int f(int n) { if(n<=2) return n; return f(i-1)+f(i-2); } 非常感谢CSDN组织的比赛,在这次比赛之后,我会积极学习基础算法--枚举、贪心、分治、递归、搜索,图算法--最小生成树、数的遍历、最短路径、二分图、网络流等,动态规划,数据结构--线段树,并查集,数学知识--组合数学、数论、计算几何等算法。 但是自己对一些数据结构还是不太了解,代码的速度也是很慢的,是今年7月份开始接触算法,大一完全划水,非常感谢csdn组织的比赛。#include
2.走楼梯
#include