Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查网格/真值表的对称性_C++_C_Truthtable - Fatal编程技术网

C++ 检查网格/真值表的对称性

C++ 检查网格/真值表的对称性,c++,c,truthtable,C++,C,Truthtable,是否可以使用8输入真值表(如OR、AND、XOR等)来确定上述8x8的对称性?因此,我在评论中说的是重复检查某些对,并且不对它们进行“异或” 对的概念是,如果一行是对称的,那么某些对必须相等。注意,我们没有索引数组,在每一行中,这些对都有索引0和7,1和6,2和5,以及3和4。要使行对称,所有4个都必须是匹配对。总之,要使表对称,需要检查32对(每行4对,超过8行) NOT XOR的诀窍在于,由于XOR在两者不同时返回true,因此如果两者相同,则该语句的否定将返回true 因此,如果您只想使用

是否可以使用8输入真值表(如OR、AND、XOR等)来确定上述8x8的对称性?

因此,我在评论中说的是重复检查某些对,并且不对它们进行“异或”

对的概念是,如果一行是对称的,那么某些对必须相等。注意,我们没有索引数组,在每一行中,这些对都有索引0和7,1和6,2和5,以及3和4。要使行对称,所有4个都必须是匹配对。总之,要使表对称,需要检查32对(每行4对,超过8行)

NOT XOR的诀窍在于,由于XOR在两者不同时返回true,因此如果两者相同,则该语句的否定将返回true

因此,如果您只想使用布尔运算来执行整个检查,那么您需要获取这些对中的每一对(现在称之为(a,b)和do(不是(a或b))(
!(a^b)
,然后是所有32个检查的结果


当然,如果我真的在代码中这样做,我更愿意定期检查是否相等。

假设你的意思与我的意思相同,并且你的输入类似于
bool[][]
std::vector
(或者
char
而不是
bool
,只要
==
有效,这并不重要),您只需迭代矩阵的一半并与另一半进行比较,如下所示:

t t f f f f t t
t t f f f f t t
f f t t t t f f
f f t t t t f f
t t f f f f t t
t t f f f f t t
f f t t t t f f
f f t t t t f f
bool symmetric=true;

对于(unsigned int i=1;symmetric&&i你的意思是除了重复拾取对和不进行异或之外?你的意思是拾取对吗?是的。非异或如何帮助确定对称性?你能举个例子吗?我想我会给出一个更详细的答案。凯文,你所说的“对称”到底是什么意思?您会将64个值中的哪一个输入到“8输入真值表”中我相信你可能是指一些布尔函数,给出你的例子?NOT XOR感觉有点奇怪。等式工作很好,不是吗?是的,我只是提出了NOT XOR的东西,以防OP出于一些奇怪的原因只需要使用布尔运算。我会对任何正常的用例使用等式。谢谢你的解决方案。我会尝试一下。Y是的,我也会使用等式检查,但需要使用真值表。好吧,
!(a^b)
不完全是真值表,是吗?你可以为它创建真值表。那么“使用8输入真值表,例如OR、AND、XOR等”呢部分?是的,有那个部分,坦白说,我不知道这意味着什么。谢谢你的解决方案。我需要使用真值表而不是比较。好吧,这是一个问题,因为我不知道哪种表最合适。但是假设我可以为AND、OR、XOR等操作创建一个8输入真值表是否有可能确定对称性?如上所述:您会将64个值中的哪一个放入8输入表中?
bool symmetric = true;
for (unsigned int i = 1; symmetric && i <= n; ++i) {
  for (unsigned int j = i+1; symmetric && j <= n; ++j) {
    symmetric = (M[i][j] == M[j][i]);
  }
}