問題
太郎くんは自転車で D km 離れた目的地へ向かいます。自転車の速さは V km/h です。
出発から到着までにかかる時間を 〇時間〇分 の形式で出力してください。端数は切り捨てです(例: 2.7時間 → 2時間42分)。
入力形式
D V
制約
$1 \le D \le 1000$
$1 \le V \le 100$
$D, V$ は整数
入出力例
入力例 1
100 3出力例 1
33 20入力例 2
60 4出力例 2
15 0入力例 3
7 2出力例 3
3 30ヒント (段階的開示)
ヒント1: 方向性
「時間」を直接計算しようとすると小数が出て扱いが難しい。まず「分」に変換しよう。
ヒント2: アプローチ
D÷V 時間 = D×60÷V 分。総分数を整数で求めれば、あとは
// と % で解ける。ヒント3: 誘導
D, V = map(int, input().split())
total_minutes = D * 60 // V
hours = total_minutes // 60
minutes = total_minutes % 60
print(hours, minutes)
模範解答 (Python)
D, V = map(int, input().split())
total_minutes = D * 60 // V
hours = total_minutes // 60
minutes = total_minutes % 60
print(hours, minutes)
Step-by-Step 解説
1入力を受け取る
D, V = map(int, input().split()) でアンパック代入。
2総分数を整数のまま計算
D * 60 // V を使う。int(D / V * 60) はfloat誤差リスクがある(例: 209.99... → 209 になるバグ)。整数演算で誤差を避けるのが定石。
3時間と分に分解
hours = total_minutes // 60(切り捨て除算)、minutes = total_minutes % 60(剰余)。
4出力
print(hours, minutes) はスペース区切りで出力。
よくあるミス
| ミス | 原因 | 正しい書き方 |
|---|---|---|
int(D / V * 60) | float誤差 | D * 60 // V |
| 先に割ってから掛ける | 同上 | 先に掛けてから割る |
print(str(hours)+str(minutes)) | スペースなし | print(hours, minutes) |
int(input()) でスペース区切り入力 | 使えない | map(int, input().split()) |
次のステップ
- 発展: D, V が小数の場合に対応する(
math.floor) - 次回予告: テーマ2「条件分岐(if/elif/else)」