这两种写作风格之间的区别在哪里。编译器在第一种情况下显示正确答案,在第二种情况下显示错误。
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;
答案 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;
}
}