问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入(本题含有多组样例输入):
4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。
输出:
true or false
示例:
输入
7 2 1 10
输出
true
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
a:while(scan.hasNextInt()){
List<Integer> list = new ArrayList<>();
for(int i = 0; i < 4; i++){
list.add(scan.nextInt());
}
for(int i = 0; i < 4; i++){
//4个元素轮流尝试第一个位置
int temp = list.remove(i);
if(getResult(temp, list)){
System.out.println("true");
continue a;
}
list.add(i, temp);
}
System.out.println("false");
}
}
private static boolean getResult(int temp, List<Integer> list){
if (list.size() == 0) {
//深搜出口
return temp == 24;
} else {
for(int i = 0; i < list.size(); i++){
int num = list.remove(i);
if(getResult((temp + num), list) || getResult((temp - num), list) || getResult((temp * num), list)){
return true;
}else if(temp % num == 0 && getResult((temp / num), list)){
//保证不会出现非整数(若先除再乘为整数,则先乘再除也为整数)
return true;
}
list.add(i, num);
}
return false;
}
}
}