2 条题解
-
0
这道题应该考察的递归的经典题型。第一大步解释n是什么,n就是距离跳出去还有多少布。第二大步查看边界分别是距离还有1步的时候可以一次跳出去,距离两步的时候可以一步跳出去,距离三步的时候可以2步跳出去。第三大步从特殊到普遍,那么假如我的f(n-2)与f(n-3)是正确的来求我这一层所需要实现的逻辑,那就是我每次只能前进两步或者三步,也就意味着我每次都能距离井口能缩减两步到三步,那么只要求f(n-2)与f(n-3)就可以
int function(int n){//距离跳出去还有多少布 if (n == 0)return 0; if (n == 1)return 1; if (n == 2)return 1; if (n == 3)return 2; return function(n - 3) + function(n - 2); } int main() { int n; scanf("%d", &n); printf("%d", function(n)); return 0; }
-
0
这种老题目居然没人写题解,是因为太简单了吗?
这个题目主要考察数列递推(高中数学这一块
核心为a[n]=a[n-2]+a[n-3];
有几个注意事项: 1.初始化的时候a[0]应该设为1,因为这个递推用的是到达该位置的可能种数; 2.最后输出的时候要加上a[n-1]而不是单单a[n],题目允许直接跳出井
代码#include<stdio.h> #include<string.h> #include<stdlib.h>
int main(){ int a[52]; int n,i; scanf("%d",&n); a[0]=1; a[1]=0; a[2]=1; a[3]=1;
for(i=4;i<=n;i++){ a[i]=a[i-2]+a[i-3]; } printf("%d",a[n]+a[n-1]); return 0;}
- 1
信息
- ID
- 165
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 1606
- 已通过
- 412
- 上传者