给定的表达式有大约26个变量'A','B',.....,'Z',
和3个操作员,'&','|','^'(XOR)。
例如:输入 4 7& | AB | CA
4表示变量(A,B,C,D)的数量
7表示前缀表达式的长度。
输出:
A B C D OUTPUT
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
现在我有一个算法来评估前缀表达式:
int Expr(){
char c = getchar();
if c is an operator
op1 = Expr()
op2 = Expr()
return op1 c op2
else if c is a variable
return the value of c
}
我的问题是如何使变量A,B,C,D ......变为0或1,
并执行n ^ 2次以构建真值表。
我尝试设置一个数组[26] = {'A',...,'Z'}来匹配输入,
但它不起作用。
答案 0 :(得分:0)
当然可以。一个简单的解决方案依赖于由0到2 ^ n-1之间的数字v
表示的“n位向量”。
您使用循环
枚举它们for (int v = 0; v < (1<<n); v++) {
...
}
然后使用最右边的位。如果v & 1
不是0,则设置为
(v >> 1) & 1
不为零,则设置。 C是(v >> 2) & 1
等等。
实际上,任何char letter
;它是(v >> (letter-'A')) & 1
。