问题是要在字符矩阵中找到对称性(CollectionView
)
其中CollectionView
包含一些字符(仅 0 或 1 )。
请注意,在代码的输出中,一旦我将所有4个徽标元素都设置为0,即char logo[N][N]
,那么还将执行logo
代码。
我已经实现了对称性检查代码,发现唯一的问题发生在给定的代码块上,在该代码块中执行else块并且给出错误的结果(NO)。
代码段:(if(0==0==0==0)
是方矩阵的大小)
else
我希望输出为“ 是”,因为每次检查4个徽标元素都相同(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");
),但是在这里您可以看到在1111
得到4个零之后,结果为否。
您可以看到所有徽标元素均为1111时,它会重新进入循环,但在0000之后,它会断裂并打印NO。
答案 0 :(得分: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
答案 1 :(得分:1)
logo[j][k]==logo[N-1-j][k]==logo[j][N-1-k]
==
保持关联。它返回0
或1
。这意味着第二个==
将0
或1
与logo[j][N-1-k]
进行比较。您不需要这样做,因此需要通过复制某些操作数并使用&&
运算符来插入正确的操作数。