1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 条件式メニュー(言語選択)
  4. 問題一覧 Ruby編
  5. 論理演算子の組み合わせ 3

条件式メニューのサムネイル
論理演算子の組み合わせ 3 (paizaランク C 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

整数A, B, C, D が与えられます。
以下の 2 つの条件がともに真のとき、またそのときに限り真となる条件式を書いてください。
1. (A と B が等しい) または (C と D が等しい)
2. A と C が等しい

論理演算子には優先順位があり、多くの言語では AND 演算子の方が OR 演算子より優先順位が高いです。
したがって、多くの言語では AND 演算子が先に評価され、その後 OR 演算子が評価されます。(「評価される」とは、ここでは論理演算を行い真偽を返すという意味です。)
優先順位が同じ演算子は左から順に評価されることが多いです。

しかし、プログラムを書いていると AND 演算子より OR 演算子の方を先に評価したい場合があります。
例えば、今回の問題の条件式は以下のように考えられます。
条件 1:A == B OR C == D
条件 2:A == C
この 2 つの条件がともに真のとき真となる条件式なので、最終的な条件式は 条件 1 AND 条件 2、つまり A == B OR C == D AND A == C と考えられます。
この場合 AND 演算子が先に評価されるので、最初に C == D AND A == C が評価され、その後 A == B OR 「C == D AND A == C」の結果 が評価されます。
では、例えば C == D が偽、A == C が偽、A == B が真である場合を考えてみます。
このとき、この条件式は以下のように評価されていきます。


  1. C == D AND A == C が評価され偽となります。

  2. A == B OR 「C == D AND A == C」の結果 が評価され、この条件式は最終的に真となります。



しかし、このとき条件 1 は真、条件 2 は偽であるため、この条件式は偽になる必要があります。
つまり、条件 2 が偽であるにもかかわらずこの条件式は真となっているため、この条件式は誤りです。
したがって、正しい条件式を書くには、最初に条件 1 である A == B OR C == D を評価し、その後 「A == B OR C == D」の結果 AND A == C を評価する必要があります。

このように AND 演算子より OR 演算子の方を先に評価したい場合は、先に評価したい論理演算を () で囲うことで先に評価することができます。
論理演算子の優先順位を確認しないと意図しない挙動になることがあるので注意しましょう。
では、() を利用して条件式を書いてみましょう。

入力される値

A B C D

・ 整数 A, B, C, D が空白区切りにこの順で与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

以下の 2 つの条件がともに真のとき、またそのときに限り真となる条件式の真偽を出力してください。
1. (A と B が等しい) または (C と D が等しい)
2. A と C が等しい

出力結果は以下のものを期待しています。
・ 条件式が真である場合:1, true, True, TRUE のいずれか
・ 条件式が偽である場合:0, false, False, FALSE のいずれか
条件式の出力結果が上記のいずれにも当てはまらない言語を使用している場合は、if 文等を使用して上記のいずれかの出力結果になるようにしてください。
主要な言語での出力方法例を示します。
Pythonの場合 : print( 条件式 )
C++の場合 : std::cout << ( 条件式 ) << std::endl;
Javaの場合 : System.out.println( 条件式 );
Rubyの場合 : puts 条件式

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件をみたします。

1 ≦ A, B, C, D ≦ 100

入力例1

1 1 1 2

出力例1

1

入力例2

1 1 2 1

出力例2

0

入力例3

50 80 50 50

出力例3

1

問題一覧へ戻る

ページの先頭へ戻る