0

问题是在包含一些字符(只有01char logo[N][N] )的字符矩阵( )中找到对称性。logo

请注意,在代码的输出中,一旦我将所有 4 个徽标元素都设为 0 即 if(0==0==0==0)else代码也会被执行。

我已经实现了对称性检查代码,发现唯一的问题是在执行 else 块的给定代码块上发生并且它给出了错误的结果(否)。

代码片段:(N是方阵的大小)

int YES=1;
for(j=N-1;j>((N-1)>>1);j--) /* symmetricity condition particular to the problem*/
    {
        for(k=0;k<((N-1)>>1);k++)
        {
            printf("%c %c %c %c\n",logo[j][k],logo[N-1-j][k],logo[j][N-1-k],logo[N-1-j][N-1-k]); // used this line for debugging
            if(logo[j][k]==logo[N-1-j][k]==logo[j][N-1-k]==logo[N-1-j][N-1-k])continue;   //checking symmetricity
            else  // here else is executed when all 4 logo elements are 0
            {
                YES=0;
                break;
            }
        }
    }
    (YES==1)?printf("YES\n"):printf("NO\n");

我希望输出为“ YES ”,因为每次检查 4 个徽标元素时发现相同(11110000)但在这里您可以看到在获得 4 个零后结果为NO 。i

第一行是测试用例的数量,第二行是 N,然后是 N*N 矩阵 输出:第一行是测试用例的数量,第二行是N,然后是N*N矩阵

您可以看到所有徽标元素何时为 1111,然后它重新进入循环,但在 0000 之后它会中断并打印 NO。

4

2 回答 2

1

用这个替换你的 if 语句:

if((logo[j][k]==logo[N-1-j][k]) && 
   (logo[N-1-j][k]==logo[j][N-1-k]) &&
   (logo[j][N-1-k]==logo[N-1-j][N-1-k]))
  continue;   //checking symmetricity

当前实现执行以下操作:

logo[j][k]==logo[N-1-j][k] // returns TRUE
==logo[j][N-1-k]           // returns FALSE (I imagine that logo[j][N-1-k] does not equal TRUE
==logo[N-1-j][N-1-k]       // returns FALSE (I imagine that logo[N-1-j][N-1-k] does not equal FALSE
于 2019-05-16T11:25:36.317 回答
1
logo[j][k]==logo[N-1-j][k]==logo[j][N-1-k]

==是左关联的。它返回01。这意味着 2nd==将与01进行比较logo[j][N-1-k]。您不希望这样,因此您需要通过复制其中一些操作数并使用&&运算符来插入正确的操作数。

于 2019-05-16T11:30:14.450 回答