64 条题解
-
0
注意本版权属于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
题意概括
输出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)根据以上显然可分为多个子问题解决,可用递归(递推更好,但是奈何课上学的递归)。
思路
- 递归边界:
- 题中已给
如果 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)
- 同上
代码
#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
题解 本版权属于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
以AC
</span>#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; }
-
0
#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
哎呀呀挑战题(脑细胞大量趋势) 看本侠的!
#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
#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
这题太***了!!!
#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
不难
#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
题解
一条不华丽的分割线本题已将递归函数给我们了, 只需要无脑照编就行了。
代码
#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; }
俺的头像
小小动图
感谢!
啊哩嘎哆,美羊羊桑。 -
0
-
0
对于一个递归函数 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
#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
#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
首先 我要
吐槽‘表扬’两点 第一点是输出,非得整那么复杂简单 第二点是数据范围,坑了我整整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
#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
#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
#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
- 上传者