OR语句

时间:2015-07-05 17:32:22

标签: c++

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

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;

2 个答案:

答案 0 :(得分:2)

考虑这种情况

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

Code1将输出yes。很好。 现在考虑code2

    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什么都不输出。

答案 1 :(得分:1)

你错过了第二个条件:

像这样:

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;
    }
}