AIZU ONLINE JUDGE

AOJ ITP1 2_B(Range)を解く

AOJ_ITP1_2_B

Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の2_B問題をC++とPython で解いてみました。

ITP1 のトピック2では、条件分岐を学びます。「条件によって実行する内容を変え、処理の流れを制御する構造文を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。

問題(2_B: Range)

問題はリンク先をご覧ください。

AOJ ITP1 2_B問題:Range

条件文で使う条件式に論理演算を含む場合を学びます。

解答案

C++ プログラム例(ITP1 2_B)

#include <iostream>

using namespace std;

int main()
{
	int a, b, c;

	cin >> a >> b >> c;

	if ((a < b)&&(b < c)) {
		cout << "Yes" << endl;
	} else {
		cout << "No" << endl;
	}

	return 0;
}

C と C++ は、論理AND演算子は && を、ビットAND演算子は & を使います。論理AND演算子のほうが頻度は高いと思いますが、少し間違えやすい文法かもしれません。

C++ では、演算子 && の替わりにキーワード and を使うことができます。あまり見ないですが。

Python プログラム例(ITP1 2_B)

Python では、論理ANDを and で表します。ビットANDを & で表します。

a, b, c = map(int, input().split())
if a < b and b < c:
    print("Yes")
else:
    print("No")

比較演算子は、次のようにつなげて書くこともできます。このため、and が不要になりました(C プログラマには、不具合に見えるかもしれません)。Python は、こちらの書き方(chained-comparison)を推奨しているようです。

a, b, c = map(int, input().split())
if a < b < c:
    print("Yes")
else:
    print("No")

論理演算子ではありませんが、if 文の代わりに3項演算子を使った次の書き方もできます。

a, b, c = map(int, input().split())
print("Yes" if a < b < c else "No")

上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。

最後に

論理演算子について学びました。a < b < c と書けるのは、直感とも近いです。Python は、自然な見た目の文法を選択していることが学べました。

引き続き、ITP1 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA