13 条题解

  • 18
    @ 2023-7-22 13:48:23
    #include <iostream>
    using namespace std;
    int a(int n)
    {
        if(n == 1 || n == 2 || n ==3)
        {
            return 1;
        }
        else
        {
            return a(n - 1) + a(n - 2) + a(n - 3);
        }
    }
    int main()
    {
        int n;
        cin >> n;
        cout << a(n);
        return 0;
    }
    

    解析:

    1.咱先定义函数,函数要先判断参数是否为第 1 、2 、 3 项如果是则直接返回 1 。

    2.如果不是前三项,就返回要求的那一项的前三项之和。(不用再管其他的了,函数会自己递归的。)

    3.再把主函数写好,定义变量、接收数据、调用函数、输出、结束 mian 函数。 image 看看这么可爱的温迪,一定要点赞啊!👍

  • 4
    @ 2023-7-21 13:06:46

    解析

    根据数的排列可以看出,这组数连续的3个数相加,等于第4个数。

    因此,写出递归公式f(n) = f(n - 1) + f(n - 2) + f(n - 3)

    边界条件为f(1) = 1, f(2) = 1, f(3) = 1

    题解

    #include <iostream>
    using namespace std;
    int f(int n)
    {
        if(n == 1 || n == 2 || n ==3)
            return 1;
        else
            return f(n - 1) + f(n - 2) + f(n - 3);
    }
    int main()
    {
        int n;
        cin >> n;
        cout << f(n);
        return 0;
    }
    
    
    • 1
      @ 2024-2-15 15:28:21
      #include <bits/stdc++.h>
      using namespace std;
      int n,sum,a[35]={1,1,1,1};
      int main()
      {
          cin>>n;
          for(int i=4;i<=n;i++){
          
              a[i]=a[i-1]+a[i-2]+a[i-3];
              
          }
          cout<<a[n];
      }
      
      1. #include <bits/stdc++.h>: 同上,包含了一个非标准的头文件,它包含了C++标准库的大部分头文件。
      2. using namespace std;: 使用std命名空间,使得可以直接使用如cincout等标准库中的对象而无需前缀std::
      3. int n,sum,a[35]={1,1,1,1};: 声明了三个变量。n 是用户输入的项数,sum(尽管在这段代码中未使用)可能是一个用于计算的临时变量,a 是一个大小为35的整数数组,初始化为前四项都为1。这个数组用于存储数列的值。
      4. int main(): 主函数的开始。
      5. {: 主函数的开始括号。
      6. cin>>n;: 从标准输入读取一个整数,并赋值给变量 n
      7. for(int i=4;i<=n;i++){: 一个for循环,从第4项开始,一直到第 n 项。
      8. a[i]=a[i-1]+a[i-2]+a[i-3];: 这是四阶斐波那契数列的定义。数组的第 i 项(从1开始计数)是前三个项的和。
      9. }: for循环的结束括号。
      10. cout<<a[n];: 输出数组的第 n 项的值。 image
      • 1
        @ 2023-8-22 21:59:28

        找规律并求出数列第n项。


        规律:数列的每一项都是该项的前三项之和(除了前三项)。

        用数组a存储数列,将第一,二,三项初始化为1,根据规律有a[i]=a[i-1]+a[i-2]+a[i-3],用循环递推出数列即可。 这样可以提高效率,如果用递归的话会重复调用函数,每次都要重新算一遍。

        #include<iostream>
        using namespace std;
        int n,a[33]={1,1,1,1};//定义数组并初始化前三项为 1
        int main(){
            cin>>n;//输入
            for(int i=4;i<=n;i++){
                a[i]=a[i-1]+a[i-2]+a[i-3];//根据规律从第四项开始递推至第n项
            }cout<<a[n];//输出
            return 0;
        }
        

        n≤30,数字这么小担心什么,直接用递归不好吗 本题用递归也可以,思路一样,代码如下

        #include<bits/stdc++.h>
        using namespace std;
        int n;
        int line(int n){
            if(n<4)return 1;//边界条件
            return line(n-1)+line(n-2)+line(n-3);//按规律递归
        }
        int main(){
            cin>>n;//输入
            cout<<line(n);//调用函数并输出
            return 0;
        }
        
        • 0
          @ 2024-4-20 20:13:39
          #include<iostream>
          using namespace std;
          int main()
          {
              int f[35],n;
              cin >> n;
              f[1]=1;
              f[2]=1;
              f[3]=1;
              for(int i=4;i<=n;i++)
              {
                  f[i]=f[i-1]+f[i-2]+f[i-3];//递推公式
              }
              cout << f[n];
              return 0;
          }
          
          • 0
            @ 2023-7-26 10:24:06

            俗话说得好“打表过样例,暴力出奇迹“

            #include <bits/stdc++.h>
            using namespace std;
            int a[31] = {1,1,1,3,5,9,17,31,57,105,193,355,653,1201,2209,4063,7473,13745,25281,46499,85525,157305,289329,532159,978793,1800281,3311233,6090307,11201821,20603361};
            int main()
            {
                int n;
                cin >> n;
                cout << a[n - 1];
                return 0;
            }
            
          • 0
            @ 2023-7-23 9:57:01

            hello(>v<):

            先点"亿"赞,后欣赏 ~全篇重点~

            审题(斐波那契数列

            升级版👀️ !!!):

            输入 n,表示数列的第n项,

            输出 数列第n项的值。

            很简单(so (⊙o⊙)…easy),用递归解决! 定义pl函数,排列拼音的简称(pai lie)。

            边界-pl(1)== pl(2)== pl(3) == 1

            公式-pl(n) = pl(n - 1)+pl(n - 2)+pl(n - 3)

            #include <iostream>
            using namespace std;
            int pl(int n)
            {
                if(n == 1 || n == 2 || n ==3)
                    return 1;
                else
                    return pl(n - 1) + pl(n - 2) + pl(n - 3);
            }
            int main()
            {
                int n;
                cin >> n;
                cout << pl(n);
                return 0;
            }
            
            • 0
              @ 2023-7-22 20:42:34

              又来写题解

              先点赞,后观看 全篇重点

              审题(斐波那契升级版):

              输入 n,表示数列第n项

              输出 数列第n项的值

              很简单,用递归解决

              边界-fib(1) = 1,fib(2) = 1,fib(3) = 1

              公式-fib(n) = fib(n - 1)+fib(n - 2)+fib(n - 3)

              所以,代码:

              ……………………

              开个玩笑

              代码如下

              #include <bits/stdc++.h>
              using namespace std;
              
              int fib(int n)
              {
              if (n <= 3)
              return 1;
              return fib(n - 1) + fib(n - 2) + fib(n - 3);
              }
              
              int main()
              {
              int n;
              cin >> n;
              cout << fib(n);
              return 0;
              }
              //看完别复制
              //你看懂了吗
              //没看懂continue(再看一遍)
              //看懂了自己敲,反正又不长
              //(包括空行17行)
              //陈哲宇 2023 07 22
              
              • 0
                @ 2023-7-22 11:01:27

                斐波那契数列变式

                用benben列表记录 有效节省内存 防止题目限制

                #include <iostream>
                using namespace std;
                int benben[30];
                int fib(int n)
                {
                    if (benben[n] != -1)
                        return benben[n];
                    if(n == 1){
                        benben[n] = 1;
                    }else if(n == 2){
                        benben[n] = 1;
                    }else if(n == 3){
                        benben[n] = 1;
                    }else{
                        benben[n] = fib(n - 1) + fib(n - 2) + fib(n - 3);
                    }
                    return benben[n];
                }
                int main()
                {
                    for (int i = 0; i < 30; i++)
                        benben[i] = -1;
                    int n;
                    cin >> n;
                    cout << fib(n) << endl;
                    return 0;
                }
                

                这么好的方法 快点个赞!!!👍 ❤️ image image

                • 0
                  @ 2023-7-21 22:09:14

                  这不就是斐波那契数列升级版吗,hh 再告诉你们一个小知识,导入using namespace std;是会占空间的,压缩流就应该多打std::👀️

                  #include <iostream>
                  int fib2(int n){
                      if(n<=3) return 1;
                      return fib2(n-1)+fib2(n-2)+fib2(n-3);}
                  int main(){
                      int n;std::cin>>n;std::cout<<fib2(n);return 0;}
                  
                  • 0
                    @ 2023-7-21 20:45:45

                    通过题目给的数据得出边界条件为: f(1) = 1

                    f(2) = 1

                    f(3) = 1

                    递归式为:

                    f(n) = f(n - 1) + f(n - 2) + f(n - 3)

                    整合亿下,加上一些基本的东西,就成答案了

                    #include <iostream>
                    using namespace std;
                    
                    int f(int n)
                    {
                        if(n == 1 || n == 2 || n == 3)
                            return 1;
                        else
                            return f(n - 1) + f(n - 2) + f(n - 3);
                    }
                    
                    int main()
                    {
                        int n;
                        cin >> n;
                        cout << f(n);
                        return 0;
                    }
                    
                    • -1
                      @ 2023-8-30 10:30:44

                      规律: a[i] = a[i - 1] + a[i - 2] + a[i - 3]

                      #include <bits/stdc++.h>
                      using namespace std;
                      int n;
                      int f(int a)
                      {
                          if (a == 1 || a == 2 || a == 3)
                          {
                              return 1;
                          }
                          return f(a - 1) + f(a - 2) + f(a - 3);
                      }
                      int main()
                      {
                          cin >> n;
                          cout << f(n);
                          return 0;
                      }
                      

                      第二篇题解,嗨嗨嗨

                      • -2
                        @ 2023-8-4 21:30:11

                        什么?不想用函数?那就试试这个吧!

                        #include<bits/stdc++.h>
                        using namespace std;
                        int main()
                        {
                            int n;
                            cin>>n;
                            int a[40];
                            a[1]=1,a[2]=1,a[3]=1;
                            if(n==1 or n==2 or n==3) cout<<1;
                            else
                        	{
                        		for(int i =4;i<=35;i++)
                            	{
                                	a[i]=a[i-1]+a[i-2]+a[i-3];
                            	}
                            	cout<<a[n];
                        	}	
                            
                            return 0;
                        }
                        
                        • 1

                        信息

                        ID
                        312
                        时间
                        1000ms
                        内存
                        256MiB
                        难度
                        2
                        标签
                        递交数
                        899
                        已通过
                        544
                        上传者