本サイトAIZU ONLINE JUDGE ITP1_3_C へはこちらから
問題:2 つの数の交換
2つの整数 x, y を読み込み、それらを値が小さい順に出力するプログラムを作成して下さい。
ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。
Input
入力は複数のデータセットから構成されています。各データセットは空白で区切られた2つの整数 x, y を含む1行から構成されています。
x と y がともに 0 のとき入力の終わりを示し、このデータセットに対する出力を行ってはいけません。
Output
各データセットごとに、x と y を小さい順に並べたものを1行に出力して下さい。x と y の間には1つの空白を入れて下さい。
Constraints
- 0 ≤ x, y ≤ 10,000
- データセットの数は 3,000 を超えない。
Sample Input
3 2
2 2
5 3
0 0
Sample Output
2 3
2 2
3 5
解答例
while True:
x, y = map(int, input().split())
if x == 0 and y == 0:
break
elif x < y:
print(x, y)
else:
print(y, x)
解説
以下のように解いていきます。
while文を使用し、入力処理を行う
ある条件まで入力を続ける場合はwhile文とif文を組み合わせて、入力処理を行います。
# if文の条件式に当てはまるまでループ処理を続ける
while True:
処理
# この条件式に当てはまる場合、break文でループ処理を終了する
if 条件式:
break
今回は、whileループ内でmap関数でx、yに2つの整数を設定し、x と y がともに 0の場合にbreak文で処理を終了します。
# 終了条件に当てはまるまで処理を続ける
while True:
# input().split()で複数個の文字列を取得 → int関数に当てはめint型に変換 → x, yに設定
x, y = map(int, input().split())
# x と y がともに0の場合にbreak文で処理を終了
if x == 0 and y == 0:
break
ここで使用したwhile文について説明します。
while文とは
while 文は指定した条件式が真の間、処理を繰り返しを実行する関数です。基本的な書式は次の通りです。
while 条件式:
条件式が真の時に実行する文
また、繰り返し処理を強制的に終了するbreak文について解説します。
break文とは
break文はwhile 文や for 文の処理を中断する文です。
while 文や for 文のブロックの中で break 文が実行されるとfor文やwhile文の繰り返し処理が強制的に終了し、次の文へ処理が移ります。基本的な書式は次の通りです。
# xが3のとき、break文でforループを終了する
for x in range(5):
if x == 3:
break
print(x)
# 出力
# 0
# 1
# 2
while文内でx と y を小さい順に並べたものを1行に出力
いろいろな方法がありますが、xとyを比較してx < y の場合はx, y の順で表示し、x > y の場合はy, x の順で表示します。
先ほどの”x と y がともに0の場合”に設定したif文に追記するかたちでelif、else文を使用し条件分岐させます。
while True:
x, y = map(int, input().split())
# x と y がともに0の場合にbreak文で処理を終了
if x == 0 and y == 0:
break
# x < y の場合はx, yの順で表示
elif x < y:
print(x, y)
# x > y の場合はy, xの順で表示
else:
print(y, x)
最後に、もう一度プログラムを確認してみましょう。
# 終了条件に当てはまるまで処理を続ける
while True:
# input().split()で複数個の文字列を取得 → int関数に当てはめint型に変換 → x, yに設定
x, y = map(int, input().split())
# x と y がともに0の場合にbreak文で処理を終了
if x == 0 and y == 0:
break
# x < y の場合はx, yの順で表示
elif x < y:
print(x, y)
# x > y の場合はy, xの順で表示
else:
print(y, x)
コメント