15 条题解
-
2
Turtle and Equations题解
思路
很简单,把所有情况枚举出来就行了!
解题方法
如思路
复杂度
时间复杂度:
略
空间复杂度:
略
Code
#include<bits/stdc++.h> using namespace std; int a,b,c,d; int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>a>>b>>c>>d; for(int i=1;i<=4;i++){ int y=0,m=0; if(i==1) y=a+b; if(i==2) y=a-b; if(i==3) y=a*b; if(i==4) y=a/b; m=y; for(int j=1;j<=4;j++){ if(j==1){ y=y+c; if(y==d){ cout<<"Yes"; return 0; }else{ y=m; } } if(j==2){ y=y-c; if(y==d){ cout<<"Yes"; return 0; }else{ y=m; } } if(j==3){ y=y*c; if(y==d){ cout<<"Yes"; return 0; }else{ y=m; } } if(j==4){ y=y/c; if(y==d){ cout<<"Yes"; return 0; }else{ y=m; } } } } cout<<"No"; return 0; }
-
2
MX.[J2A]题解
思路
先来说说思路。
很简单,判断即可。
计算出以下情况(以下的
=
不指程序中的,而是数学中的):代码
#include<bits/stdc++.h> using namespace std; int a,b,c,d; int ans=0; int Calculate(int x,int y) { int f,s; if(x==1) f=a+b; if(x==2) f=a-b; if(x==3) f=a*b; if(y==1) s=f+c; if(y==2) s=f-c; if(y==3) s=f*c; return s; } int main() { cin>>a>>b>>c>>d; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) if(Calculate(i,j)==d) ans=1; if(ans==1) cout<<"Yes"; else cout<<"No"; }
避免打表无聊,于是写了个复杂的。
-
0
Turtle and Equations题解
思路
简单打表。
Code
#include<bits/stdc++.h> using namespace std; long long a,b,c,d; int main(){ cin>>a>>b>>c>>d; if(a+b+c==d||a+b-c==d||a+b*c==d||(a+b)*c==d||a-b+c==d||a-b-c==d||a-b*c==d||(a-b)*c==d||a*b+c==d||a*b-c==d||a*b*c==d||(a*b)*c==d||a/b+c==d||a/b-c==d||a/b*c==d||a/(b*c)==d){ cout<<"Yes"; }else{ cout<<"No"; } return 0; }
-
0
Turtle and Equations题解
思路
爆枚两个预算符
Code
#include<bits/stdc++.h> using namespace std; int main() { int a,b,c,d; cin>>a>>b>>c>>d; for(int i=1;i<=3;i++) { for(int j=1;j<=3;j++) { int num,sum,ans; switch(i) { case 1:num=a+b;break; case 2:num=a-b;break; case 3:num=a*b;break; } switch(j) { case 1:sum=num+c;break; case 2:sum=num-c;break; case 3:sum=num*c;break; } if(sum==d) { cout<<"Yes"; return 0; } } } cout<<"No"; return 0; }
-
-1
打表即可。很水。
#include<bits/stdc++.h> #define int long long #define INF 0x3f3f3f using namespace std; int a,b,c,d; signed main() { cin>>a>>b>>c>>d; if((a+b)+c==d||(a-b)+c==d||(a*b)+c==d){ cout<<"Yes"; } else if((a+b)-c==d||(a-b)-c==d||(a*b)-c==d){ cout<<"Yes"; } else if((a+b)*c==d||(a-b)*c==d||(a*b)*c==d){ cout<<"Yes"; } else cout<<"No"; return 0; }
-
-2
标Turtle and Equations题解
思路
枚举 把所有方法都枚举出来就好了。
解题方法
没啥可说的,把所有情况都写出来
Code
#include <bits/stdc++.h> using namespace std; int main(){ int a, b, c, d; cin >> a >> b >> c >> d; if ((a + b) + c == d) cout << "Yes\n"; else if((a + b) - c == d) cout << "Yes\n"; else if((a + b) * c == d) cout << "Yes\n"; else if((a - b) + c == d) cout << "Yes\n"; else if((a - b) - c == d) cout << "Yes\n"; else if((a - b) * c == d) cout << "Yes\n"; else if((a * b) + c == d) cout << "Yes\n"; else if((a * b) - c == d) cout << "Yes\n"; else if((a * b) * c == d) cout << "Yes\n"; else cout << "No\n"; return 0; }
-
-2
题解
思路:一个一个枚举可能的情况,如果枚举完了,都没有等于 ,那么就输出 No。
解题方法:同上。
时间复杂度:
Code
#include<iostream> #include<cstdio> #include<cmath> using namespace std; long long a,b,c,d; int main() { cin>>a>>b>>c>>d; char k='*'; if(k=='*') { long long tmp=a*b; if(tmp+c==d) { cout<<"Yes"<<endl; return 0; } else if(tmp-c==d) { cout<<"Yes"<<endl; return 0; } else if(tmp*c==d) { cout<<"Yes"<<endl; return 0; } } k='-'; if(k=='-') { long long tmp=a-b; if(tmp+c==d) { cout<<"Yes"<<endl; return 0; } else if(tmp-c==d) { cout<<"Yes"<<endl; return 0; } else if(tmp*c==d) { cout<<"Yes"<<endl; return 0; } } k='+'; if(k=='+') { long long tmp=a+b; if(tmp+c==d) { cout<<"Yes"<<endl; return 0; } else if(tmp-c==d) { cout<<"Yes"<<endl; return 0; } else if(tmp*c==d) { cout<<"Yes"<<endl; return 0; } } cout<<"No"<<endl; return 0; }
-
-2
算法:枚举。
这题由于从左往右计算即可,所以无需使用栈。
因为给定了 ,而且只需在两个空格中分别填入加减乘三种运算符中的一个运算符即可,所以最多有 种情况,枚举所有情况(如果结果为 直接结束)求解即可。
接下来是代码。
#include<bits/stdc++.h> using namespace std; int a,b,c,d; char c1[]={'+','-','*'}; char c2[]={'+','-','*'}; //打两张表方便枚举 int main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);//读入优化 cin>>a>>b>>c>>d; for(int i = 0; i < 3; i++) { int sum = 0; switch(c1[i]) { case '+':{ sum+=a+b; break; } case '-':{ sum+=a-b; break; } case '*':{ sum+=a*b; break; } } for(int j = 0; j < 3; j++) { int sum2 = sum; switch(c2[j]) { case '+':{ sum+=c; break; } case '-':{ sum-=c; break; } case '*':{ sum*=c; break; } } if(sum==d) { cout<<"Yes"; return 0; } sum = sum2; } } cout<<"No"; return 0; }
因为 上限都是 ,可以求得结果最大为 , 所以不会爆
int
。这样,本题就解决了。
如有不足,还请指出,感谢观看。
-
-2
Turtle and Equations题解
思路
看到两个空格就想到了两重循环。
解题方法
每个循环都是 次,这样可以遍历两个空格的符号,然后利用 计算结果,如果相等则输出
Yes
,直接return 0
。复杂度
时间复杂度:
代码
#include <bits/stdc++.h> using namespace std; int a, b, c, d, tmp; int main() { cin >> a >> b >> c >> d; for (int i = 1; i <= 3; ++i) { for (int j = 1; j <= 3; ++j) { if (i == 1) { tmp = a + b; } else if (i == 2) { tmp = a - b; } else if (i == 3) { tmp = a * b; } if (j == 1) { tmp += c; } else if (j == 2) { tmp -= c; } else if (j == 3) { tmp *= c; } if (tmp == d) { cout << "Yes" << endl; return 0; } } } cout << "No" << endl; return 0; }
-
-2
给你四个正整数 。
现在你有一条算式 。你需要判断能否在两个方框内分别填入三种运算符 之一(运算符可以重复使用),使得算式运算的结果等于 。
每个方框有 种可能性,所以整个方案数总共有 种,所以可以枚举每一种情况,然后判断即可。
时间复杂度 。
#include <bits/stdc++.h> int a, b, c, d; int main() { std::cin >> a >> b >> c >> d; if ((a + b) + c == d || (a + b) - c == d || (a + b) * c == d || (a - b) + c == d || (a - b) - c == d || (a - b) * c == d || (a * b) + c == d || (a * b) - c == d || (a * b) * c == d) puts("Yes"); // 枚举 9 种情况 else puts("No"); return 0; }
-
-3
J2A题解
思路
模拟每一个算式,看等不等于d。
解题方法
if
时间复杂度:
时间复杂度
空间复杂度:
添加空间复杂度, 示例:
Code
#include<bits/stdc++.h> using namespace std; int a,b,c,d,s; int main(){ cin>>a>>b>>c>>d; s=(a+b)+c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a-b)+c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a*b)+c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a+b)-c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a+b)*c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a-b)-c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a-b)*c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a*b)*c; if(s==d){ cout<<"Yes"<<endl; return 0; } s=(a*b)-c; if(s==d){ cout<<"Yes"<<endl; return 0; } cout<<"No"<<endl; return 0; }
-
-3
-
-6
Turtle and Equations题解
赛时没时间,赛后看了一下。一开始看到题吓了一跳,还以为是数学题。仔细一看才发现,这是道妥妥大水题。
思路
说白了很简单。仔细看题面,就可以发现,表达式很简洁,所以只需要分类讨论就行了。
解题方法
我的写法可能麻烦了些,写了个简单的函数来判断,具体看代码吧。
Code
#include<bits/stdc++.h> using namespace std; typedef long long ll; bool chk(int a,int b,int c) { if(a+b==c||a-b==c||a*b==c) return true; else return false; } int main() { ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); int a,b,c,d; cin>>a>>b>>c>>d; int he=a+b,cha=a-b,ji=a*b; if(chk(he,c,d)||chk(cha,c,d)||chk(ji,c,d)) cout<<"Yes"; else cout<<"No"; return 0; }
- 1
信息
- ID
- 25
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 1672
- 已通过
- 558
- 上传者