题目链接
如果用了nextInt()或者nextDouble()等等读取了数字然后后面要读字符串的话需要先用一个nextLine()吸收掉数字后面的Enter!
切记java比较两个字符串是否相等要用equals方法!Debug了好久…
import java.util.*;
public class Main {
public static void main(String[] Args) {
Scanner sc=new Scanner(System.in);
//既然一共12个砝码
//枚举每个砝码作为轻或者重的赝品
//看看是否满足输入的三个平衡条件
String[][] str=new String[3][];
int N;
N=sc.nextInt();
sc.nextLine();//nextInt 各种之后都需要多这一句缓冲,否则读取字符串会出错
for(int k=0;k<N;k++) {
String tmp;
for(int m=0;m<3;m++) {
tmp=sc.nextLine();
str[m]=tmp.split(" ");
}
for(char test='A';test<='L';test++) {
//先假设砝码i是重的的
boolean flag=true;
for(int i=0;i<3;i++) {
if(str[i][0].contains(String.valueOf(test)) && !str[i][2].equals("up") ) {
flag=false;
break;
}else if(str[i][1].contains(String.valueOf(test)) && !str[i][2].equals("down") ) {
flag=false;
break;
}else if(!str[i][0].contains(String.valueOf(test)) && !str[i][1].contains(String.valueOf(test)) && !str[i][2].equals("even")) {
flag=false;
break;
}
}
if(flag) {
//输出当前test是重的
System.out.println(test + " is the counterfeit coin and it is heavy.");
break;
}
flag=true;
//假设是轻的再判断
for(int i=0;i<3;i++) {
if(str[i][0].contains(String.valueOf(test)) && !str[i][2].equals("down") ) {
flag=false;
break;
}else if(str[i][1].contains(String.valueOf(test)) && !str[i][2].equals("up") ) {
flag=false;
break;
}else if(!str[i][0].contains(String.valueOf(test)) && !str[i][1].contains(String.valueOf(test)) && !str[i][2].equals("even")) {
flag=false;
break;
}
}
if(flag) {
//输出当前test是轻的
System.out.println(test + " is the counterfeit coin and it is light.");
break;
}
}
}
}
}