时隔将近两个月,我回来了哈哈哈哈哈哈哈哈哈。
看着一周小结的排名越来越低太难受了,于是我回来继续写文章
今天这道题其实不难,重点是说一下解题过程中遇到的麻烦和坑点
题目描述
给出一个算式(a*b=c或a/b=c或a+b=c或a-b=c)其中a,b,c是三个数字,但是其中有一个是问号,表示未知,请你求出未知的那一个量。
输入格式
只有一行,一个算式(a*b=c或a/b=c或a+b=c或a-b=c),可能会有多余的空格
输出格式
“?”代表的数字,保留2位小数。
输入输出样例
输入 #1
1+1 = ?输出 #1
2.00输入 #2
1-? =0输出 #2
1.00输入 #3
2*?= 6输出 #3
3.00输入 #4
8/5= 输出 #41.60
这题看起来非常的简单,是一道大模拟,那我们就先把做题流程理出来
- 去空格
- 择出=
- 择出+-*/
- 切分出三个数,找出哪个是问号
- 枚举求值
这里有一个小小的建议
就是敲完每一步的代码后,输出测试信息检查一下,这部分是否正确,免得100多行最后去debug,那样很麻烦。
以上5个步骤,应该很好模拟出来。
# include <iostream>
# include <cstdio>
# include <cstring>
# include <iomanip>
using namespace std;
# define int long long
string s;
int a,b,c,flag;
int fuhao;
int fenge;
int fuhaowei;
double sum;
signed main(){
getline(cin,s);
for (int i=0;i<s.length();i++){
if (s[i]==' '){
s.erase(i,1);
i--;
}
}
int len=s.length();
for (int i=0;i<len;i++){
if (s[i]=='+'){
fuhao=1;
fuhaowei=i;
}else if (s[i]=='-'){
fuhao=2;
fuhaowei=i;
}else if (s[i]=='*'){
fuhao=3;
fuhaowei=i;
}else if (s[i]=='/'){
fuhao=4;
fuhaowei=i;
}
}
for (int i=0;i<len;i++){
if (s[i]=='='){
fenge=i;
}
}
for (int i=0;i<fuhaowei;i++){
if (s[i]=='?'){
a=-1;
}else{
a*=10;
a+=(s[i]-'0');
}
}
for (int i=fuhaowei+1;i<fenge;i++){
if (s[i]=='?'){
b=-1;
}else{
b*=10;
b+=(s[i]-'0');
}
}
for (int i=fenge+1;i<len;i++){
if (s[i]=='?'){
c=-1;
}else{
c*=10;
c+=(s[i]-'0');
}
}
//cout<<fuhaowei<<" "<<fenge;
//cout<<a<<" "<<b<<" "<<c<<" ";
if (a==-1){//第一个数为?
if (fuhao==1){
sum=c-b;
}else if (fuhao==2){
sum=c+b;
}else if (fuhao==3){
sum=1.00*c/b;
}else if (fuhao==4){
sum=c*b;
}
}else if (b==-1){
if (fuhao==1){
sum=c-a;
}else if (fuhao==2){
sum=a-c;
}else if (fuhao==3){
sum=1.00*c/a;
}else if (fuhao==4){
sum=1.00*a/c;
}
}else{
if (fuhao==1){
sum=a+b;
}else if (fuhao==2){
sum=a-b;
}else if (fuhao==3){
sum=a*b;
}else if (fuhao==4){
sum=a*1.00/b;
}
}
printf("%.2lf\n",sum);
return 0;
}
模拟之后还不AC的继续看下去
如果按照我的思路完完整整的写下来了的话,大概率是42分或8分
本蒟篛遇到这个情况的时候,一开始还很镇静,可当我一顿乱改之后,从42分掉到了8分,心里一下子就不平静了。随后便开始了胡乱的尝试,自己造的测试点也通通能AC。这一下可给我整不会了。于是我进入了这题的讨论版,看到了这样一个帖子:
我就知道这题的坑不简单
???
此时我才意识到此题的毒瘤,输入的时候除了该有的字符和空格外,还有一堆其他的字符。
但令我震惊的是题目和样例中居然没有说明???!!!
愿所有人能避坑成功