pontz_rwのブログ

プログラミング等の備忘録

ITP1_3_A: Print Many Hello World

複数のHello World | プログラミング入門 | Aizu Online Judge
繰り返しに関する問題


for文range()を使用します。
range()は指定した条件に従ってリストオブジェクトを作成して返してくれます。
range(1000)と記述した場合、リスト[0, 1, ... ,999]が返されます。


解答

for i in range(1000):
    print("Hello World")

ITP1_2_D: Circle in a Rectangle

長方形の中の円 | プログラミング入門 | Aizu Online Judge
比較の問題


条件は、頂点(0, 0)と頂点(W, H)からなる長方形の中に円が含まれるかどうかです。
頂点(x, y)、頂点(W, H)と円の中心と半径との関係を考えます。

頂点(x, y)と、円の中心と半径との関係は、0 <= x - r and 0 <= y - r
頂点(W, H)と、円の中心と半径との関係は、x + r <= W and y + r <= H
これをまとめます。


解答1

W, H, x, y, r = list(map(int, input().split()))
print('Yes' if 0 <= x - r <= x + r <= W and 0 <= y - r <= y + r <= H else 'No')


上記の比較を円の中心(x, y)を基準に考えてみると、短い比較で済みます。
解答2

W, H, x, y, r = list(map(int, input().split()))
print('Yes' if r <= x <= W - r and r <= y <= H - r else 'No')

ITP1_2_C: Sorting Three Numbers

3つの数の整列 | プログラミング入門 | Aizu Online Judge
昇順に並べ替える問題


リストを昇順にソートするにはsort()、もしくはsorted()を使用します。
sort()はリストの本体自体を変更します。

対して、sorted()は整列されたリストを返すため、元のリストは破壊しません。


解答1
整数型に変換しなくても同じ回答が得られます。

i = list(map(int, input().split()))
i.sort()
print(i[0], i[1], i[2], sep=' ')


解答2

a, b, c = sorted(input().split())
print(a, b, c)

ITP1_2_B: Range

範囲 | プログラミング入門 | Aizu Online Judge
入力値が昇順かどうかを求める問題


3つの入力値を比較します。


解答1

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


解答2
pythonでは、複数の比較を続けた書くことができます。

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

ITP1_2_A: Small, Large, or Equal

大小 等価 | プログラミング入門 | Aizu Online Judge
入力値を比較し、大小関係を出力する問題


if文を使用し、条件に応じて処理を分岐させます。


解答1

a, b = map(int, input().split())
if a < b:
    print('a < b')
elif a > b:
    print('a > b')
else:
    print('a == b')


解答2
一行で書こうと思うと下記の通りになります。

a, b = map(int, input().split())
print("a {} b".format('<' if a < b else '>' if a > b else '=='))

ITP1_1_D: Watch

時計 | プログラミング入門 | Aizu Online Judge
秒単位の入力値をh:m:s形式へ変換する問題


print()を使う際、sep=''オプションを使用することで、区切りながら文字列を出力できます。

時間hは、入力値を3600秒で割った商で求められます。
分mは、入力値を時間hで割り、その余りを60秒で割った商で求められます。
秒sは、入力値を60秒で割った余りで求められます。


解答

S = int(input())
print(S // 3600, S % 3600 // 60, S % 60, sep=':')


ver.3 より、/を使用した整数の除算の結果は少数になります。
整数の除算で結果を整数にしたい場合、//を使用します。

ITP1_1_C: Rectangle

長方形 | プログラミング入門 | Aizu Online Judge
たて a cm よこ b cm の長方形の面積と周の長さを求める問題


a と b が1つの空白で区切られて与えられます。
まずはsplit()を使い、文字列を分割します。
split()は、引数がない場合、空白文字で分割され、さらに各要素の先頭/末尾の空白文字が削除されます。


解答1

line = input().split()
# 入力値を整数型に変換
a = int(line[0])
b = int(line[1])
# 計算後の値を文字列に変換
print(str(a * b) + " " + str((a + b) * 2))


解答2
map()を使い、入力値を空白で分割した各文字列に対し、整数型への変換を行います。
また、str.format()を使い、文字列の書式化操作を行います。

a, b = map(int, input().split())
print("{0} {1}".format(a * b, (a + b) * 2))


Ver. 3.1 より、位置引数指定を省略することができるようになりました。
{} {}{0} {1}と同じになります。