题解:P12219 [蓝桥杯 2023 国 Java B] 不完整的算式

题解:P12219 [蓝桥杯 2023 国 Java B] 不完整的算式

Link

大分类讨论。

  • 显然有 \(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);
        }
    }
}
posted @ 2025-05-05 23:28  M1_Byte  阅读(17)  评论(0)    收藏  举报