AIZU ONLINE JUDGE

AOJ ITP1 2_D(Circle in a Rectangle)を解く

AOJ_ITP1_2_D

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

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

問題(2_D: Circle in a Rectangle)

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

AOJ ITP1 2_D問題:Circle in a Rectangle

トピック2の最後として、少し複雑な条件を書いてみます。

解答案

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

円の中心から半径を引くとx軸とy軸の最小値が分かります。円の中心から半径を加えるとx軸とy軸の最大値が分かります。これと長方形の座標から判定をします。

#include <iostream>

using namespace std;

int main()
{
	int W, H , x, y, r;

	cin >> W >> H >> x >> y >> r;

	if ((0 <= (x - r))&&((x + r) <= W)
	  &&(0 <= (y - r))&&((y + r) <= H)) {
		cout << "Yes" << endl;
	} else {
		cout << "No" << endl;
	}

	return 0;
}

条件式は長いですが行を分けて、なるべく分かりやすいように書きました。

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

C++ のコードを、Python に置き換えました。Python 版も、長い条件式を行を分けて、分かりやすいように書きました。

w, h, x, y, r = map(int, input().split())
if 0 <= (x - r) and (x + r) <= w and \
   0 <= (y - r) and (y + r) <= h:
    print("Yes")
else:
    print("No")

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

最後に

トピック2では、条件分岐を学びました。Python は、条件文の本文をインデントで表現している、比較演算子をつなげて書けるなど、多くの点で分かりやすい文法を実現していることが学べました。

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

COMMENT

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

CAPTCHA