2 条题解

  • 0
    @ 2025-11-6 14:43:35

    这道题应该考察的递归的经典题型。第一大步解释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
      @ 2025-9-27 17:07:16

      这种老题目居然没人写题解,是因为太简单了吗?

      这个题目主要考察数列递推(高中数学这一块

      核心为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
      上传者