Atcoderの問題「ABC361_B」に関する質問について、提出したC++コードがWA(Wrong Answer)を出してしまう原因とその修正方法を解説します。プログラミング初心者の方でもわかりやすく、コードをどのように改善すべきかを具体的に示します。
問題の概要とコードの問題点
Atcoderの「ABC361_B」の問題では、指定された条件に基づいて、与えられた変数を使って判定を行うプログラムを作成する必要があります。質問者が投稿したコードでは、いくつかの条件分岐を使って結果を出力する形になっていますが、正しい結果を得られない理由がいくつか考えられます。
特に、条件式の設定に誤りがあり、`if`文の範囲が正しく設定されていない可能性があります。
修正案:if文と論理演算子の見直し
コードの中で特に重要なのは、`if`文の条件をどのように整理するかです。例えば、`a<=g`の条件を満たす場合、`d>g`を確認する形にしていますが、この論理演算が正しく機能していないため、結果が間違っている可能性があります。
修正案として、条件分岐をもう一度確認し、`&&`や`||`を適切に使って論理演算を組み合わせる方法が有効です。また、`bool`型変数の初期化も重要です。
修正後のコード例
#includeusing namespace std; int main(){ int a,b,c,d,e,f; int g,h,i,j,k,l; cin>>a>>b>>c>>d>>e>>f; cin>>g>>h>>i>>j>>k>>l; bool xf=false; bool yf=false; bool zf=false; if(a<=g && d>g){ xf=true; } if(b<=h && e>h){ yf=true; } if(c<=i && f>i){ zf=true; } if(xf && yf && zf){ cout<<"Yes"< コード改善ポイント
上記のコード修正では、各条件式のロジックを整理し、無駄な`else`を削除しました。また、`if`文を簡潔に書き直して、可読性を向上させました。これにより、誤った出力を避けることができます。
加えて、`bool`型変数は条件を満たした場合にのみ`true`になるように設定し、全ての条件が満たされた時に「Yes」を出力するようにしました。
まとめ
Atcoderの問題でWAが出る原因は、条件文や論理演算子の使い方に誤りがある場合が多いです。質問者のコードでは、複数の条件を組み合わせて判定する部分で問題が発生していました。改善方法として、`if`文の整理と論理演算子の見直しが効果的です。これで正しい結果を得ることができるようになります。


コメント