64 条题解

  • 0
    @ 2024-3-2 14:28:53

    注意本版权属于hetao2056

    long long w(long long a,long long b,long long c){
        if (a<=0||b<=0||c<=0)return 1;
        if (a>10||b>10||c>10)return w(10,10,10);
        if (a<b&&b<c)
            return w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
        return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
    }
    int main(){
        scanf("%lld%lld%lld",&a,&b,&c);
      printf("w(%lld,%lld,%lld)=%lld",a,b,c,w(a,b,c));
        return 0;
    }
    
    • 0
      @ 2024-2-25 21:55:51

      题意概括

      输出w(a,b,c),值如下计算: 对于一个递归函数 w(a,b,c) 如果 a≤0 或 b≤0 或 c≤0 就返回值1。 如果 a>10 或 b>10 或 c>10 就返回 w(10,10,10) 如果 a<b 并且 b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c) 其它的情况就返回 w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1) 注意:例如 w(30,-1,0) 又满足条件 1 又满足条件 2,请按照最上面的条件来算,答案为 1。

      方法

      w(a,b,c)根据以上显然可分为多个子问题解决,可用递归(递推更好,但是奈何课上学的递归)。

      思路

      1. 递归边界:
        • 题中已给 如果 a≤0 或 b≤0 或 c≤0 就返回值1。 如果 a>10 或 b>10 或 c>10 就返回 w(10,10,10)
      2. 递归公式:
        • 同上如果 a<b 并且 b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c) 其它的情况就返回 w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)

      代码

      #include <bits/stdc++.h>
      using namespace std;
      long long a,b,c;
      long long w(long long a,long long b,long long c){
          if (a<=0 || b<=0 || c<=0)  return 1;
          else if (a>10 || b>10 || c>10)  return w(10,10,10);
          //递归边界
          else if (a<b && b<c)  return w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
          else  return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
          //递归公式
      }
      int main()
      {
          cin>>a>>b>>c;
          cout<<"w("<<a<<","<<b<<","<<c<<")="<<w(a,b,c);
          //如果你回的话printf("w(%lld,%lld,%lld)=%lld",a,b,c,w(a,b,c));更简单
          return 0;
      }
      

      易错点

      • 开long long, 开long long! 开long long!!!
      • 十年OI一场空,不开long long见祖宗
      • 0
        @ 2024-2-25 21:36:19

        题解 本版权属于hetao19333943 🚫一旦发现抄袭者,直接向管理员请求把你们拉黑,感谢您的配合】

        (づ ̄3 ̄)づ

        #include <iostream> using namespace std; long long w(long long a,long long b,long long c) { if(a <= 0 || b <= 0 || c <= 0) { return 1; } else if(a > 10 || b > 10 || c > 10) { return w(10,10,10); } else if(a < b && b < c) { return w(a,b,c - 1) + w(a,b - 1,c - 1) - w(a,b - 1,c); } else { return w(a - 1,b,c) + w(a - 1,b - 1,c)+w(a - 1,b,c - 1)-w(a - 1,b - 1,c - 1); } } int main() { long long a,b,c; cin >> a >> b >> c; cout << "w(" << a << "," << b << "," << c << ")=" << w(a,b,c) << endl; return 0; } 什么?你实在不会做?! 那就点个赞支持一下 后复制吧!👍

        好了,彩蛋时间🎉️

        《小伙捡了一沓钱》
        小伙捡了一沓钱,
        他以为捡的是美元.
        反过来一看是冥币,
        小伙直呼真晦气.
        这冥币只要你一碰,
        半夜女鬼来索命.
        小伙丝毫也不慌,
        把冥币投进功德箱.
        半夜女鬼真来到,
        才发现自己中了套.
        四面佛像金光闪,
        吓得女鬼腿发软.
        佛祖打出五连鞭,
        打得女鬼直冒烟.
        佛骂女鬼神经病,
        感到寺庙来索命.
        骂完觉得还不爽,
        打出降龙十八掌.
        

        哈哈哈哈哈哈哈哈😄

        终于做完了,编辑不易,请大家用赞的方式鼓励一下我吧🎉️

        • 0
          @ 2024-2-24 15:51:30

          以AC

          
          #include<bits/stdc++.h>
          using namespace std;
          long long w(long long a,long long b,long long c){
          if(a<=0|| b <= 0 || c <= 0)return 1;
          else if(a > 10 || b > 10 || c > 10)return w(10,10,10);
          else if(a < b && b < c)return w(a,b,c - 1) + w(a,b - 1,c - 1) - w(a,b - 1,c);
          else return w(a - 1,b,c) + w(a - 1,b - 1,c)+w(a - 1,b,c - 1)-w(a - 1,b - 1,c - 1);
          
          }
          int main(){
          long long a,b,c;
          cin >> a >> b >> c;
          cout << "w(" << a << "," << b << "," << c << ")=" << w(a,b,c) << endl;
          return 0;
          }
          
          
          </span>
          • 0
            @ 2024-2-20 22:29:11
            #include<bits/stdc++.h>
            using namespace std;
            long long a,b,c;
            int w(int a,int b,int c)
            {
                if (a<=0 || b<=0 || c<=0)
                {
                    return 1;
                }
                else if (a>10 || b>10 || c>10)
                {
                    return w(10,10,10);
                }
                else if (a<b && b<c)
                {
                    return w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
                }
                else
                {
                    return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
                }
            }
            int main()
            {
                cin >> a >> b >> c;
                cout << "w(" << a << "," << b << "," << c << ")=";
                cout << w(a,b,c);
                return 0;
            }
            
            • 0
              @ 2024-1-14 10:32:50

              哎呀呀挑战题(脑细胞大量趋势) 看本侠的!

              #include <bits/stdc++.h> using namespace std; long long w(long long a, long long b, long long c) { if ((a <= 0) || (b <= 0) || (c <= 0)) { return 1; } else if ((a > 10) || (b > 10) || (c > 10)) { return w(10, 10, 10); } else if ((a < b) && (b < c)) { return w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c); } return w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1); } int main() { long long a, b, c; cin >> a >> b >> c; cout << "w(" << a << "," << b << "," << c << ")=" << w(a, b, c); return 0; }


              怎么说呢长到眼花······

              算了······


              小彩蛋 从前集市上有个人, 正在推销他的矛和盾。 ”我的矛什么都能刺破,我的盾什么都刺不破!“ 从西边走来一个人, 问:“那用你的矛刺你的盾呢?” 那人愣了一下, 然后拿矛捅死了另一个人,“就你事多······”

              • 0
                @ 2023-12-27 21:04:27
                #include <iostream>
                using namespace std;
                long long f(long long k,long long n,long long j)
                {
                    if(k <= 0 || n <= 0 || j <= 0)
                    {
                        return 1;
                    }
                    else if(k > 10 || n > 10 || j > 10)
                    {
                        return f(10,10,10);
                    }
                    else if(k < n && n < j)
                    {
                        return f(k,n,j - 1) + f(k,n - 1,j - 1) - f(k,n - 1,j);
                    }
                    else
                    {
                        return f(k - 1,n,j) + f(k - 1,n - 1,j)+f(k - 1,n,j - 1)-f(k - 1,n - 1,j - 1);
                    }
                }
                int main()
                {
                    long long a,b,c;
                    cin >> a >> b >> c;
                    cout << "w(" << a << "," << b << "," << c << ")=" << f(a,b,c) << endl;
                    return 0;
                }
                
                
                • 0
                  @ 2023-12-2 17:26:18

                  这题太***了!!!

                  #include <iostream>
                  #include <algorithm>
                  #include <cmath>
                  using namespace std;
                  typedef long long ll;//不开long long见祖宗
                  ll w(ll a,ll b,ll c)
                  {
                      if (a<=0 || b<=0 || c<=0)return 1;
                      if (a>10 || b>10 || c>10)return w(10,10,10);
                      if (a<b && b<c)return w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
                      return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
                  }
                  int main()
                  {
                      ll a,b,c;
                      cin>>a>>b>>c;
                      cout<<"w("<<a<<','<<b<<','<<c<<")="<<w(a,b,c);//格式很重要
                      return 0;
                  }
                  

                  注意!main()函数不能用long long类型,因为

                  error: '::main' must return 'int'

                  1,这题递归式好变态

                  2,这题格式好变态

                  • 0
                    @ 2023-11-25 20:26:03

                    不难

                    #include<iostream>
                    using namespace std;
                    long long a , b , c;
                    int w(long long a,long long b,long long c)
                    {
                        if(a <= 0 || b <= 0 || c <= 0)
                        {
                            return 1;
                        }
                        else if(a > 10 || b > 10 || c > 10)
                        {
                            return w(10,10,10);
                        }
                        else{
                            return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
                        }
                    }
                    int main()
                    {
                        cin>>a>>b>>c;
                        cout<<"w("<< a<<"," <<b<<","<<c<<")="<<w(a,b,c);
                    
                    }
                    

                    只需要注意两点:1,注意题目要求的判断顺序2,数据用 long long,不然会溢出

                    • 0
                      @ 2023-11-12 15:48:15

                      题解


                      一条不华丽的分割线

                      本题已将递归函数给我们了, 只需要无脑照编就行了。

                      代码
                      #include<bits/stdc++.h>
                      using namespace std;
                      long long a,b,c;
                      long long w(long long a,long long b,long long c)
                      {
                      	if(a<=0||b<=0||c<=0) return 1;
                      	else if(a>10||b>10||c>10) return w(10,10,10);
                      	else if(a<b&&b<c) return w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
                      	else return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
                       } 
                      int main()
                      {
                      	cin >> a >> b >> c;
                      	cout << "w(" << a <<","<< b <<","<< c <<")=" << w(a,b,c); 
                          return 0;
                      }
                      

                      俺的头像

                      image

                      小小动图

                      image

                      image

                      感谢!

                      啊哩嘎哆,美羊羊桑。

                      • 0
                        @ 2023-11-7 21:33:19

                        #include<iostream> using namespace std; long long w() {

                        }

                        
                        
                        • 0
                          @ 2023-10-19 21:08:32

                          对于一个递归函数 w(a,b,c)

                          • 如果 a <= 0 或 b <=0 或 c <= 0就返回值1。
                          • 如果 a>10 或 b>10 或 c>10 就返回 w(10,10,10)
                          • 如果 a<b 并且 b<c就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)
                          • 其它的情况就返回 w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)

                          注意:例如 w(30,-1,0) 又满足条件 1 又满足条件 2,请按照最上面的条件来算,答案为 1。 代码就按题目说的写,因为按最上面的条件来算,所以要按顺序写,最重要的是,要开long long, 不能太贪心的开unsigned long long,因为这是无符号,只有90,第二个测试点是负数,所以负数会变成非常大。 废话说了那么多,下面上代码:

                          #include <bits/stdc++.h>
                          #define ll long long
                          using namespace std;
                          ll a,b,c;
                          ll w(ll a,ll b,ll c)
                          {
                              if (a <= 0 || b <= 0 || c <= 0)
                              {
                                  return 1;
                              }
                              else if (a > 10 || b > 10 || c > 10)
                              {
                                  return w(10,10,10);
                              }
                              else if (a < b && b < c)
                              {
                                  return w(a,b,c - 1) + w(a,b - 1,c - 1) - w(a,b - 1,c);
                              }
                              else
                              {
                                  return w(a - 1,b,c) + w(a - 1,b - 1,c) + w(a - 1,b,c - 1) - w(a - 1,b - 1,c - 1);
                              }
                          }
                          signed main()
                          {
                              cin >> a >> b >> c;
                              cout << "w(" << a << "," << b << "," << c << ")=" << w(a,b,c);
                              return 0;
                          }
                          
                          • 0
                            @ 2023-10-6 17:20:16
                            #include <iostream>
                            using namespace std;
                            int w(int a,int b,int c)
                            {
                                if (a <= 0 || b <= 0 || c <= 0)
                                {
                                    return 1;
                                }
                                else if (a > 10||b > 10||c > 10)
                                {
                                    return w(10,10,10);
                                }
                                else if (a < b && b < c)
                                {
                                    return w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
                                }
                                else
                                {
                                    return w(a-1,b,c)+w(a-1,b-1,c) +w(a-1,b,c-1)-w(a-1,b-1,c-1);
                                }
                            }
                            int main()
                            {
                                long long a,b,c;
                                cin >> a >> b >> c;
                                cout << "w("  << a << "," << b << "," << c << ")="<< w(a,b,c);
                                return 0;
                            }
                            
                            • 0
                              @ 2023-10-6 13:44:41

                              三步走,题头(变量类型写long long,不会写就先按之前的程序run一遍,再把所有的int改long long )+题干那一大串复制一下(这里有个问题就是所以程式的减号要替换一遍)+输出(格式拆开写就行)感谢六个核桃打赏的九转答案🎉️

                              • 0
                                @ 2023-10-6 13:09:07

                                #include <iostream> using namespace std; long long w(long long a,long long b,long long c) { if(a <= 0 || b <= 0 || c <= 0) { return 1; } else if(a > 10 || b > 10 || c > 10) { return w(10,10,10); } else if(a < b && b < c) { return w(a,b,c - 1) + w(a,b - 1,c - 1) - w(a,b - 1,c); } else { return w(a - 1,b,c) + w(a - 1,b - 1,c)+w(a - 1,b,c - 1)-w(a - 1,b - 1,c - 1); } } int main() { long long a,b,c; cin >> a >> b >> c; cout << "w(" << a << "," << b << "," << c << ")=" << w(a,b,c) << endl; return 0; }

                                • 0
                                  @ 2023-10-6 12:03:03

                                  首先 我要吐槽‘表扬’两点 第一点是输出,非得整那么复杂简单 第二点是数据范围,坑了我整整15分钟!可能是我自己的问题 ok,上核心

                                  //前面不写了
                                  long long w(long long dx,long long ys,long long zb){ //要开 long long!
                                      if(dx<=0||ys<=0||zb<=0) return 1;
                                      else if(dx>10||ys>10||zb>10) return w(10,10,10);
                                      else if(dx<ys&&ys<zb) return w(dx,ys,zb-1)+w(dx,ys-1,zb-1)-w(dx,ys-1,zb);
                                      else return w(dx-1,ys,zb)+w(dx-1,ys-1,zb)+w(dx-1,ys,zb-1)-w(dx-1,ys-1,zb-1);//以上根据题意翻译成代码
                                  }
                                  //上面别树一帜的变量名让你无从下手
                                      long long a,b,c; cin>>a>>b>>c;//开 long long!
                                      cout<<"w("<<a<<','<<b<<','<<c<<")="<<w(a,b,c);//输出很“简单”
                                  
                                      //return 0;!!!
                                  

                                  打字不易,点赞走起~

                                  记得点赞再抱走哦~

                                  • 0
                                    @ 2023-9-9 17:22:21
                                    #include <iostream>//太抽象啦!!!
                                    using namespace std;
                                    #define ________ long long
                                    #define ______ return
                                    #define AAASSS 10
                                    #define _ int
                                    ________ w(________ a,________ b,________ c)
                                    {
                                        if(a <= 0 || b <= 0 || c <= 0)
                                        {
                                            ______ 1;
                                        }
                                        else if(a > AAASSS || b > AAASSS || c > AAASSS)
                                        {
                                            ______ w(AAASSS,AAASSS,AAASSS);
                                        }
                                        else if(a < b && b < c)
                                        {
                                            ______ w(a,b,c - 1) + w(a,b - 1,c - 1) - w(a,b - 1,c);
                                        }
                                        else
                                        {
                                            ______ w(a - 1,b,c) + w(a - 1,b - 1,c)+w(a - 1,b,c - 1)-w(a - 1,b - 1,c - 1);
                                        }
                                    }
                                    _ main()
                                    {
                                        ________ a,b,c;
                                        cin >> a >> b >> c;
                                        cout << "w(" << a << "," << b << "," << c << ")=" << w(a,b,c) << endl;
                                        ______ 0;
                                    }
                                    
                                    • 0
                                      @ 2023-8-25 10:15:35
                                      #include <bits/stdc++.h>//这道题很简单,函数按照题目抄下来就好了
                                      using namespace std;
                                      int w(long long a,long long b,long long c)
                                      {
                                      if (a<=0 || b<=0 || c<=0)
                                      return 1;
                                      if (a>10 || b>10 || c>10)
                                      return w(10,10,10);
                                      return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
                                      }
                                      int main()
                                      {
                                      long long a,b,c,d;
                                      cin>>a>>b>>c;
                                      d=w(a,b,c);
                                      cout<<"w("<<a<<","<<b<<","<<c<<")="<<d;
                                      return 0;
                                      }
                                      
                                      
                                      
                                      • 0
                                        @ 2023-8-6 20:59:49
                                        #include <bits/stdc++.h>
                                        using namespace std;
                                        long long QAQ(long long a, int b, int c){
                                            if (a <= 0 || b <= 0 || c <= 0) return 1;
                                            else if (a > 10 || b > 10 || c > 10) return QAQ(10, 10, 10);
                                            if (a < b && b < c) return QAQ(a, b, c - 1) + QAQ(a, b - 1, c - 1) - QAQ(a, b - 1, c);
                                            else return QAQ(a-1,b,c) + QAQ(a-1,b-1,c) + QAQ(a-1,b,c-1) - QAQ(a-1,b-1,c-1);
                                        }
                                        int main(){
                                            long long a, b, c;
                                            cin >> a >> b >> c;
                                            long long n = QAQ(a, b, c);
                                            cout << "w(" << a << "," << b << "," << c << ")=" << n;
                                        }
                                        

                                        信息

                                        ID
                                        7
                                        时间
                                        2000ms
                                        内存
                                        256MiB
                                        难度
                                        7
                                        标签
                                        递交数
                                        9573
                                        已通过
                                        2181
                                        上传者