1 solutions
-
0
这是一道暴力题,其实很简单只要把所有情况找出来就可以。 但是看了你们的提交,我发现我的数据出水了,让部分人捡漏了。 题库里的数据已经更新了,建议先再做一遍,看看比赛的代码还能不能ac。
思路: 扑克牌的大小区间是【1,13】,取三个数、两个运算符。 对于除号:要想得到24点,绝对不可能出现两个除号(/)的情况,所以只有ab/c的这种情况(如果ab=24了,且c=1,那我们可以直接用abc来代替ab/c)。这里要注意数据类型,如果三个数都是int类型,对于(1111/5)的运算是可以得到24的,但是在实际运算中,这样算就是错的。(所以数据没出好,给你们捡漏了)。而如果都是double类型,就不会出现这种情况。 对于乘号:情况就比较多了,可以两个先加减再乘,也可以先乘再加减,也可以两个都是乘号。这里要注意如果是两个数先减,要取绝对值abs()。 对于加号和乘号,没什么好说的,没有两个减号,但可以有两个加号。
#include<bits/stdc++.h> using namespace std; int main(){ double a,b,c; int n; cin>>n; for(int i = 0;i<n;i++){ cin>>a>>b>>c; if(a+b+c==24) printf("YES\n"); else if(a*b*c==24) printf("YES\n"); else if(a+(b*c)==24) printf("YES\n"); else if(b+(a*c)==24) printf("YES\n"); else if(c+(b*a)==24) printf("YES\n"); else if((b*c)-a==24) printf("YES\n"); else if((a*c)-b==24) printf("YES\n"); else if((b*a)-c==24) printf("YES\n"); else if(b+c-a==24) printf("YES\n"); else if(a+c-b==24) printf("YES\n"); else if(b+a-c==24) printf("YES\n"); else if(a*(b+c)==24) printf("YES\n"); else if(b*(a+c)==24) printf("YES\n"); else if(c*(b+a)==24) printf("YES\n"); else if(a*b/c==24) printf("YES\n"); else if(a*c/b==24) printf("YES\n"); else if(b*c/a==24) printf("YES\n"); else if(abs(b-c)*a==24) printf("YES\n"); else if(abs(a-c)*b==24) printf("YES\n"); else if(abs(b-a)*c==24) printf("YES\n"); else cout<<"NO"<<endl; } return 0; }
- 1
Information
- ID
- 135
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 9
- Tags
- # Submissions
- 181
- Accepted
- 15
- Uploaded By