問題
太郎くんは N 冊の本を買おうとしています。1冊の定価は P 円ですが、10冊以上まとめて買うと 1冊あたり D 円の割引 が適用されます。太郎くんが支払う合計金額を求めてください。
入力形式
N P D
制約
$1 \le N \le 100$
$1 \le P \le 10000$
$1 \le D \le P$
入力はすべて整数
入出力例
入力例 1
5 1000 200出力例 1
5000入力例 2
12 1000 200出力例 2
9600入力例 3
10 500 100出力例 3
4000- 例1: 10冊未満なので割引なし → 5×1000=5000
- 例2: 12冊×(1000-200)=12×800=9600
- 例3: ちょうど10冊なので割引あり → 10×400=4000
ヒント (段階的開示)
ヒント1: 方向性
「N が10以上かどうか」で計算式を変える必要がある。条件によって処理を分ける書き方を考えよう。
ヒント2: アプローチ
if 文で2ケースに分岐。N < 10: 合計=N×P / N >= 10: 合計=N×(P-D)。ヒント3: 誘導
N, P, D = map(int, input().split())
if N >= 10:
price = P - D
else:
price = P
print(N * price)
模範解答 (Python)
N, P, D = map(int, input().split())
if N >= 10:
price = P - D
else:
price = P
print(N * price)
Step-by-Step 解説
1複数の整数を1行で受け取る
N, P, D = map(int, input().split()) でアンパック代入。
2条件分岐で1冊あたりの価格を決定
「10冊以上」は
「10冊以上」は
>= 10 で表現する。> 9 でも正しいが、意図が伝わる >= 10 が良い。
3合計金額を計算して出力
print(N * price)
よくあるミス
| ミス | 原因 | 正しい書き方 |
|---|---|---|
N, P, D = input().split() | 文字列のまま代入 | map(int, ...) |
if N > 10: | 10冊の場合が漏れる | if N >= 10: |
print(N * P - D) | Dを1回しか引かない | print(N * (P - D)) |
次のステップ
- 発展: 「10冊ごとに割引」というより複雑な割引計算
- 次回予告: テーマ2「条件分岐(if/elif/else)」