ORing of statements

ORing of statements

本文关键字:statements of ORing      更新时间:2023-10-16

这两种写作风格的区别在哪里。编译器在第一种情况下显示正确答案,在第二种情况下则显示错误答案。

1.

    string s[6];
    for(int i=0;i<6;i++) cin>>s[i];
    if(s[0]==s[2] && s[0]==s[4])  { cout<<"YES"<<endl; }
    else if(s[0]==s[2] && s[0]==s[5])  { cout<<"YES"<<endl; }
    else if((s[0]==s[3] && s[0]==s[5])) { cout<<"YES"<<endl; }
    else if((s[0]==s[3] && s[0]==s[4])) { cout<<"YES"<<endl; }
    else if((s[1]==s[2] && s[1]==s[4])) { cout<<"YES"<<endl; }
    else if((s[1]==s[2] && s[1]==s[5])) { cout<<"YES"<<endl; }
    else if((s[1]==s[3] && s[1]==s[4])) { cout<<"YES"<<endl; }
    else if((s[1]==s[3] && s[1]==s[5])) { cout<<"YES"<<endl; }
     else cout<<"NO"<<endl;

2.

string s[6];
for(int i=0;i<6;i++) cin>>s[i];
if(s[0]==s[2]||s[0]==s[3])
{
    if((s[0]==s[4]||s[0]==s[5])) { cout<<"YES"<<endl; }
}
else if(s[1]==s[2]||s[1]==s[3])
{
    if((s[1]==s[4]||s[1]==s[5])) cout<<"YES"<<endl;
}
 else cout<<"NO"<<endl;

考虑这个场景

 s[1]=s[2] and s[1]=s[4] and s[0]=s[2]//rest everything we don't care about

Code1将输出yes。良好。现在考虑代码2

    if(s[0]==s[2]||s[0]==s[3])//s[0]==s[2] so we enter here
   {
          if((s[0]==s[4]||s[0]==s[5])) //this condition is not true so `yes` is not printed
           { cout<<"YES"<<endl; } 
   }
   else if(s[1]==s[2]||s[1]==s[3])//now we won't enter here as we already entered if
   {
          if((s[1]==s[4]||s[1]==s[5])) cout<<"YES"<<endl;
   }

所以code2什么也不输出。

您在第二个中缺少一些条件

像这样:

if(s[0]==s[2] && s[1]==[5])

这将产生什么结果??

在每个if-else if条件中,必须添加一个else条件。

代码中:

if(s[0]==s[2]||s[0]==s[3])
{
    if((s[0]==s[4]||s[0]==s[5]))
    {
        cout<<"YES"<<endl;
    }
    else
    {
        cout<<"No"<<endl;
    }
}