题解:P12219 [蓝桥杯 2023 国 Java B] 不完整的算式
题解:P12219 [蓝桥杯 2023 国 Java B] 不完整的算式
大分类讨论。
- 显然有 \(4\) 种情况:\(a\) 被擦除、\(b\) 被擦除、\(c\) 被擦除以及运算符被擦除。
- 对于前三种情况,利用运算符和违背擦除的数字推出即可。
- 对于最后一种情况,直接全部列出运算符可能有的情况,分支判断即可。
- 核心代码如下:
Code
for(;s[xb]>='0'&&s[xb]<='9';xb++) a=a*10+(s[xb]-'0'); //找到 a 的位置
if(xb==0){ //a 被擦除的情况
xb++,op=s[xb],xb++;
for(;s[xb]>='0'&&s[xb]<='9';xb++) b=b*10+(s[xb]-'0');
xb++;
for(;s[xb]>='0'&&s[xb]<='9';xb++) c=c*10+(s[xb]-'0');
if(op=='+') cout<<c-b;
else if(op=='-') cout<<b+c;
else if(op=='*') cout<<c/b;
else cout<<b*c;
}
else if(s[xb]=='?'){ //运算符被擦除的情况
xb++;
for(;s[xb]>='0'&&s[xb]<='9';xb++) b=b*10+(s[xb]-'0');
xb++;
for(;s[xb]>='0'&&s[xb]<='9';xb++) c=c*10+(s[xb]-'0');
if(a+b==c) cout<<'+';
else if(a-b==c) cout<<'-';
else if(a*b==c) cout<<'*';
else cout<<'/';
}
else if(s[xb+1]=='?'){ //b 被擦除的情况
op=s[xb],xb=xb+3;
for(;s[xb]>='0'&&s[xb]<='9';xb++) c=c*10+(s[xb]-'0');
if(op=='+') cout<<c-a;
else if(op=='*')cout<<c/a;
else if(op=='-') cout<<a-c;
else cout<<a/c;
}
else{ //c 被擦除的情况
op=s[xb],xb++;
for(;s[xb]>='0'&&s[xb]<='9';xb++) b=b*10+(s[xb]-'0');
if(op=='+') cout<<a+b;
else if(op=='*') cout<<a*b;
else if(op=='-') cout<<a-b;
else cout<<a/b;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
int xb=0,a=0,b=0,c=0;
char op=' ';
for(;xb<s.length()&&s.charAt(xb)>='0'&&s.charAt(xb)<='9';xb++) a=a*10+(s.charAt(xb)-'0');
if(xb==0) {
xb++;
op=s.charAt(xb);
xb++;
for(;xb<s.length()&&s.charAt(xb)>='0'&&s.charAt(xb)<='9';xb++) b=b*10+(s.charAt(xb)-'0');
xb++;
for(;xb<s.length()&&s.charAt(xb)>='0'&&s.charAt(xb)<='9';xb++) c=c*10+(s.charAt(xb)-'0');
if(op=='+') System.out.println(c-b);
else if(op=='-') System.out.println(b+ c);
else if(op=='*') System.out.println(c/b);
else System.out.println(b*c);
}
else if (s.charAt(xb)=='?'){
xb++;
for(;xb<s.length()&&s.charAt(xb)>='0'&&s.charAt(xb)<='9';xb++) b=b*10+(s.charAt(xb)-'0');
xb++;
for(;xb<s.length()&&s.charAt(xb)>='0'&&s.charAt(xb)<='9';xb++) c=c*10+(s.charAt(xb)-'0');
if(a+b==c) System.out.println('+');
else if(a-b==c) System.out.println('-');
else if(a*b==c) System.out.println('*');
else System.out.println('/');
}
else if(xb+1<s.length()&&s.charAt(xb+1)=='?') {
op=s.charAt(xb);
xb=xb+3;
for(;xb<s.length()&&s.charAt(xb)>='0'&&s.charAt(xb)<='9';xb++) c=c*10+(s.charAt(xb)-'0');
if(op=='+') System.out.println(c-a);
else if(op=='*') System.out.println(c/a);
else if(op=='-') System.out.println(a-c);
else System.out.println(a/c);
}
else{
op=s.charAt(xb);
xb++;
for(;xb<s.length()&&s.charAt(xb)>='0'&&s.charAt(xb)<='9';xb++) b=b*10+(s.charAt(xb)-'0');
if(op=='+') System.out.println(a+b);
else if(op=='*') System.out.println(a*b);
else if(op=='-') System.out.println(a-b);
else System.out.println(a/b);
}
}
}