3 条题解

  • 0
    @ 2025-2-20 12:51:48

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

    • 0
      @ 2025-2-16 13:57:48

      #include<bits/stdc++.h>

      using namespace std;

      int digui(int a)

      {

      if(a1||a2)

      return 1;

      else

      return digui(a-1)+digui(a-2);

      }

      int main()

      {

      int m;

      cin>>m;

      cout<<digui(m);

      return 0;

      }

      • 0

        先搓一个高精度加减法(迫真)

        
        string sub(string str1,string str2)
        {
            string str;
            int tmp=str1.length()-str2.length();
            int cf=0;
            for(int i=str2.length()-1;i>=0;i--)
            {
                if(str1[tmp+i]<str2[i]+cf)
                {
                    str=char(str1[tmp+i]-str2[i]-cf+'0'+10)+str;
                    cf=1;
                }
                else
                {
                    str=char(str1[tmp+i]-str2[i]-cf+'0')+str;
                    cf=0;
                }
            }
            for(int i=tmp-1;i>=0;i--)
            {
                if(str1[i]-cf>='0')
                {
                    str=char(str1[i]-cf)+str;
                    cf=0;
                }
                else
                {
                    str=char(str1[i]-cf+10)+str;
                    cf=1;
                }
            }
            str.erase(0,str.find_first_not_of('0'));
            return str;
        }
        string add(string str1,string str2)
        {
            string str;
            int len1=str1.length();
            int len2=str2.length();
            if(len1<len2)
            {
                for(int i=1;i<=len2-len1;i++)
                   str1="0"+str1;
            }
            else
            {
                for(int i=1;i<=len1-len2;i++)
                   str2="0"+str2;
            }
            len1=str1.length();
            int cf=0;
            int temp;
            for(int i=len1-1;i>=0;i--)
            {
                temp=str1[i]-'0'+str2[i]-'0'+cf;
                cf=temp/10;
                temp%=10;
                str=char(temp+'0')+str;
            }
            if(cf!=0)  str=char(cf+'0')+str;
            return str;
        }
        

        然后搓一个递归,就是斐波那契数列的主干

        string fb(string a)
        {
        	if(a=="1") return "1";
        	if(a=="2") return "2";
        	else return add(fb(sub(a,"1")),fb(sub(a,"2")));
        }
        

        然后先关掉鲨臂的sync,再用主函数

        int main()
        {
        	string a;
        	fucksync();
        	cin>>a;
        	cout<<fb(sub(a,"1"))<<"\n";
        }
        
        • 1

        信息

        ID
        662
        时间
        1000ms
        内存
        256MiB
        难度
        1
        标签
        递交数
        26
        已通过
        24
        上传者