蓝桥杯-不完整的算式

问题描述

小蓝在黑板上写了一个形如 AopB=CAopB=C 的算式,其中 AA、BB、CC 都是非负整数,opop 是 +、-、*、/+、-、*、/(整除)四种运算之一。不过 AA、opop、BB、CC 这四部分有一部分被不小心的同学擦掉了。

给出这个不完整的算式,其中被擦掉的部分(被擦掉的部分是被完整的擦掉,不会出现留下若干位数字的情况)用 ?? 代替。请你输出被擦掉的部分。

输入描述

输入只有一行,包含一个字符串代表如上文所述的不完整的算式。

输出描述

如果被擦掉的部分是 AA、BB、CC 之一,请输出一个整数代表答案。如果被擦掉的部分是 opop,请输出+、-、*、/+、-、*、/四个字符之一代表答案。

样例输入1

复制代码
1+?=2

样例输出1

复制代码
1

样例输入2

复制代码
10?3=3

样例输出2

复制代码
/

评测用例规模

对于 20%20% 的数据,被擦掉的部分是 CC。

对于 40%40% 的数据,被擦掉的部分是 opop。

对于 100%100% 的数据,算式长度不超过 1010,不包含空格。算式中出现的整数不包含多余的前导 00。输入保证合法且有唯一解。

运行限制

语言 最大运行时间 最大运行内存
C++ 1s 256M
C 1s 256M
Java 2s 256M
Python3 3s 256M
PyPy3 3s 256M
Go 3s 256M
JavaScript 3s 256M

思路:

1.先将算式从=中间进行拆分,拆分成两个字符串

2.再判断?所在的位置

(1)判断 ?在C的部分

直接将对应的部分进行转换后进行运算

(2 )判断 ?在非C(A,op,B)的部分

在A的位置,再判断运算符所在的索引,再拆出来进行运算

在op的位置,再判断运算符所在的索引,再拆出来进行运算

在B的位置,再判断运算符所在的索引,再拆出来进行运算

基础语法:

java 复制代码
1//将输入的字符串的整行都提取
String s=scan.nextLine();

2//将字符串按照等号两边进行分割
String[] s1 =s.split("=");

3//字符串string的匹配:
C.equals("?");

4//字符的匹配:
s.charAt(i)=='?';

5//截取字符串,例子:uiasc
s.substring(1,3);
//substring(1,3)=>ia

6//字符串转换成整形数
parseInt("2122");

我的代码:

java 复制代码
import java.util.Scanner;
import java.util.Arrays;

import static java.lang.Integer.parseInt;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //先全部输入字符串
        //进行拆解分割,先分为等号左右两部分,再把等号的左边部分再单独分割成三个部分
        //数字格式为A op B=C
        //要分解成A,op,B,C
        //先读取一整行的字符串:2+2=4
        String s=scan.nextLine();
        String[] s1 =s.split("=");
        //变成:[2+2,4]
        String s2=s1[0];
        String C=s1[1];

        //当?出现在C的位置
        int id =0;
        if(C.equals("?")){
            //寻找运算符的位置
            for(int i=0;i<s1[0].length();i++){
                if(s2.charAt(i)<'0'||s2.charAt(i)>'9'){
                    id=i;
                    break;
                }
            }
            int A= parseInt(s2.substring(0,id));
            int B= parseInt(s2.substring(id+1,s2.length()));
            String op=s2.substring(id,id+1);
            if(op.equals("+")) System.out.print(A+B);
            if(op.equals("-")) System.out.print(A-B);
            if(op.equals("*")) System.out.print(A*B);
            if(op.equals("/")) System.out.print(A/B);
        }else{
            //当?出现在A,op,B的位置
            //先找到?的位置
            for(int i=0;i<s2.length();i++){
                if(s2.charAt(i) == '?'){
                    id =i;
                    break;
                }
            }
            //当?出现在A的位置时:?+9=10
            if(id ==0){
                String op=s2.substring(1,2);
                int B=parseInt(s2.substring(2,s2.length()));
                int C1=parseInt(C);
                if(op.equals("+")) System.out.print(C1-B);
                if(op.equals("-")) System.out.print(C1+B);
                if(op.equals("*")) System.out.print(C1/B);
                if(op.equals("/")) System.out.print(C1*B);
            }else if(id == s2.length()-1){
                //当?出现在B的位置时:1+?=10
                String op=s2.substring(id-1, id);
                int A=parseInt(s2.substring(0,id-1));
                int C1=parseInt(C);
                if(op.equals("+")) System.out.print(C1-A);
                if(op.equals("-")) System.out.print(A-C1);
                if(op.equals("*")) System.out.print(C1/A);
                if(op.equals("/")) System.out.print(A/C1);
            }else{
                //当?出现在op的位置时:2?8=10
                int A=parseInt(s2.substring(0, id));
                int B=parseInt(s2.substring(id +1,s2.length()));
                int C1=parseInt(C);
                if(A+B==C1) System.out.print("+");
                if(A-B==C1) System.out.print("-");
                if(A*B==C1) System.out.print("*");
                if(A/B==C1) System.out.print("/");
            }
        }
        scan.close();
    }
}
相关推荐
武子康2 小时前
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
java·开发语言·数据库·学习·mysql·spring·微服务
月阳羊3 小时前
【硬件-笔试面试题】硬件/电子工程师,笔试面试题-26,(知识点:硬件电路的调试方法:信号追踪,替换,分段调试)
笔记·嵌入式硬件·面试·职场和发展
vdoi4 小时前
【Mysql】 Mysql zip解压版 Win11 安装备忘
数据库·mysql
TDengine (老段)5 小时前
TDengine 转化类函数 TO_CHAR 用户手册
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
程序员编程指南5 小时前
Qt 与 SQLite 嵌入式数据库开发
c语言·数据库·c++·qt
fht15 小时前
SQLite
数据库·sqlite
float_六七6 小时前
MySQL索引背后的B+树奥秘
数据库·b树·mysql
~央千澈~6 小时前
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
数据库·mongodb
ManageEngineITSM6 小时前
从混乱到秩序:IT服务管理如何重塑企业运营效率
大数据·人工智能·程序人生·职场和发展·itsm
Java初学者小白7 小时前
秋招Day18 - MyBatis - 基础
java·数据库·mybatis