我正在解决SPOJ上的一个问题,我已经正确地计算了逻辑,手动完成了硬测试用例,并且它们有效,但是我得到了错误的答案,因为我无法正确打印输出。
以下是代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int n;
static int[] mem;
static String answer = "\n";
static char[] v;
public static void main(String[]args){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
int tries = Integer.parseInt(br.readLine());
for(int i=0;i<tries;i++){
String data = br.readLine();
v = data.toCharArray();
n = v.length;
mem = new int[v.length+1];
Arrays.fill(mem,-1);
answer = answer +maximum(0);
Arrays.fill(mem, -1);
answer = answer+" "+minimum(0);
System.out.print(answer);
answer="\n";
}
}
catch(Exception e){
}
}
public static int maximum(int i){
if(i==n-1) return v[i]-'0';
else {
if(mem[i]!=-1) return mem[i];
if(i+4<=n-1){
if(isMulti(v[i+3])){
if(v[i+1]=='*') return mem[i] = Math.max(((v[i]-'0'))*(maximum(i+2)),((v[i]-'0')*(v[i+2]-'0'))*(maximum(i+4)));
else return mem[i] = Math.max(((v[i]-'0'))+(maximum(i+2)),((v[i]-'0')+(v[i+2]-'0'))*(maximum(i+4)));}
else{
if(v[i+1]=='*') return mem[i] = Math.max((v[i]-'0')*maximum(i+2),((v[i]-'0')*(v[i+2]-'0'))+(maximum(i+4)));
else return mem[i] = Math.max((v[i]-'0')+(maximum(i+2)),((v[i]-'0')+(v[i+2]-'0'))+(maximum(i+4)));}
}
else if(i+2<=n-1){
if(v[i+1]=='*') return mem[i] =(v[i]-'0')*(v[i+2]-'0');
else return mem[i]= (v[i]-'0')+(v[i+2]-'0');}
return v[i]-'0';
}
}
public static boolean isMulti(char x){
if(x=='*') return true;
return false;
}
public static int minimum(int i){
if(i==n-1) return v[i]-'0';
else {
if(mem[i]!=-1) return mem[i];
if(i+4<=n-1){
if(isMulti(v[i+3])){
if(v[i+1]=='*') return mem[i] = Math.min(((v[i]-'0'))*(minimum(i+2)),((v[i]-'0')*(v[i+2]-'0'))*(minimum(i+4)));
else return mem[i] = Math.min(((v[i]-'0'))+(minimum(i+2)),((v[i]-'0')+(v[i+2]-'0'))*(minimum(i+4)));}
else{
if(v[i+1]=='*') return mem[i] = Math.min((v[i]-'0')*maximum(i+2),((v[i]-'0')*(v[i+2]-'0'))+(minimum(i+4)));
else return mem[i] = Math.min((v[i]-'0')+(minimum(i+2)),((v[i]-'0')+(v[i+2]-'0'))+(minimum(i+4)));
}
}
else if(i+2<=n-1) {
if(v[i+1]=='*') return mem[i] =(v[i]-'0')*(v[i+2]-'0');
else return mem[i]= (v[i]-'0')+(v[i+2]-'0');
}
return v[i]-'0';
}
}
}
例如输入: 2
2 + 1 * 0 * 1 + 1
0 * 4 + 5 + 6 * 2
我需要打印出来: 3 0
22 0
但是我的程序需要我按Enter键才能打印22 0,并且在绿色输入后直接打印3 0而没有任何行间距。
除了主要内容之外,不要打扰其他任何东西,其余的是程序的逻辑。
答案 0 :(得分:3)
使用println,而不是打印:
System.out.println(answer);