问题描述
小蓝在黑板上写了一个形如 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的位置,再判断运算符所在的索引,再拆出来进行运算
基础语法:
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");
我的代码:
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();
}
}