虾皮一面
服了,又是一道没见过的算法,力扣都搜不到的那种,个人评估中等题可惜没撕出来。我简历也没啥算法经历为什么不给我出 HOT100 呢

题目是解布尔方程,一共五个符号,0、1、|、&、^,表达式忽略优先级从左往右计算。现在加入变量 X,X 赋值 1 或者 0,每个 X 值可以不同,求 X 组合使得表达式结果为0,输出一个即可。
例如
输入 1|0&X^1 输出 1
输入 X&X,输出 00(或 10 或 01,输出一个即可)
我复盘的答案如下
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] s = sc.nextLine().toCharArray();
boolean f0 = false, f1 = false;
List<Integer> ans0 = new ArrayList<>();
List<Integer> ans1 = new ArrayList<>();
if (s[0] == '1') {
f1 = true;
} else if (s[0] == '0') {
f0 = true;
} else {
f0 = f1 = true;
ans0.add(0);
ans1.add(1);
}
for (int i = 1; i < s.length; i += 2) {
if (s[i] == '&') {
if (s[i + 1] == '1') {
;
} else if (s[i + 1] == '0') {
f0 = true;
f1 = false;
} else {
ans0.add(0);
ans1.add(1);
}
} else if (s[i] == '|') {
if (s[i + 1] == '1') {
f0 = false;
f1 = true;
} else if (s[i + 1] == '0') {
;
} else {
ans0.add(0);
ans1.add(1);
}
} else {
if (s[i + 1] == '1') {
f0 = f1;
f1 = f0;
List<Integer> tmp = ans0;
ans0 = ans1;
ans1 = tmp;
} else if (s[i + 1] == '0') {
f0 = f1;
f1 = f0;
List<Integer> tmp = ans0;
ans0 = ans1;
ans1 = tmp;
} else {
if (f0) {
ans0.add(0);
ans1.add(1);
} else {
ans0.add(1);
ans1.add(0);
}
}
}
}
if (f0) {
for (int i = 0; i < ans0.size(); i++) {
System.out.print(ans0.get(i));
}
} else {
System.out.println("NO ANSWER");
}
sc.close();
}
}
题目是解布尔方程,一共五个符号,0、1、|、&、^,表达式忽略优先级从左往右计算。现在加入变量 X,X 赋值 1 或者 0,每个 X 值可以不同,求 X 组合使得表达式结果为0,输出一个即可。
例如
输入 1|0&X^1 输出 1
输入 X&X,输出 00(或 10 或 01,输出一个即可)
我复盘的答案如下
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] s = sc.nextLine().toCharArray();
boolean f0 = false, f1 = false;
List<Integer> ans0 = new ArrayList<>();
List<Integer> ans1 = new ArrayList<>();
if (s[0] == '1') {
f1 = true;
} else if (s[0] == '0') {
f0 = true;
} else {
f0 = f1 = true;
ans0.add(0);
ans1.add(1);
}
for (int i = 1; i < s.length; i += 2) {
if (s[i] == '&') {
if (s[i + 1] == '1') {
;
} else if (s[i + 1] == '0') {
f0 = true;
f1 = false;
} else {
ans0.add(0);
ans1.add(1);
}
} else if (s[i] == '|') {
if (s[i + 1] == '1') {
f0 = false;
f1 = true;
} else if (s[i + 1] == '0') {
;
} else {
ans0.add(0);
ans1.add(1);
}
} else {
if (s[i + 1] == '1') {
f0 = f1;
f1 = f0;
List<Integer> tmp = ans0;
ans0 = ans1;
ans1 = tmp;
} else if (s[i + 1] == '0') {
f0 = f1;
f1 = f0;
List<Integer> tmp = ans0;
ans0 = ans1;
ans1 = tmp;
} else {
if (f0) {
ans0.add(0);
ans1.add(1);
} else {
ans0.add(1);
ans1.add(0);
}
}
}
}
if (f0) {
for (int i = 0; i < ans0.size(); i++) {
System.out.print(ans0.get(i));
}
} else {
System.out.println("NO ANSWER");
}
sc.close();
}
}
全部评论
相关推荐
点赞 评论 收藏
分享
08-25 14:06
福建农林大学 Java 
点赞 评论 收藏
分享
点赞 评论 收藏
分享