戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2012年 秋期 65


問題文

“商品値引き”表に示すとおり、値引き率が異なる商品群がある。30個買ったときに最も合計価格が安いのは、どのIDの商品か。ここで、値引き数量以上の個数を購入した場合に、合計価格に対して値引率で示す値引きが適用されるものとする。
ITパスポート 2012年 秋期  問65の問題画像

選択肢

0001
0002
0003(正解)
0004

🔒 解説は解答すると表示されます

商品値引き【ITパスポート 解説】

正解の理由

理由は、30個購入したときに合計金額が最も小さくなるのが0003だからです。0003は「値引き数量(個)」が20個で、30個は条件(20個以上)を満たします。さらに「値引き率(%)」は50%と非常に大きく、結果として合計金額が最も安くなります。

解法ステップ

まず、用語をかんたんに説明します。
  • 単価:1個あたりの価格(円)。
  • 値引き数量:その個数以上買うと値引きが適用される閾値(しきいち)。
  • 値引き率(%):合計価格に対して何%引くか。例えば50%はとして計算します。
問題のルール:
「値引き数量以上の個数を購入した場合に、合計価格に対して値引率で示す値引きが適用される」
つまり、購入個数(ここでは30個)が閾値以上なら、合計に対して割引を掛けます。
一般式:
  • 閾値を満たす場合:
  • 閾値を満たさない場合:
各商品の計算(30個購入):
  1. 0001:単価30円、閾値30、値引率30%
    閾値を満たす(30≥30)ので割引適用。
  2. 0002:単価25円、閾値40、値引率40%
    閾値を満たさない(30<40)ので割引なし。
  3. 0003:単価40円、閾値20、値引率50%
    閾値を満たす(30≥20)ので割引適用。
  4. 0004:単価35円、閾値35、値引率60%
    閾値を満たさない(30<35)ので割引なし。
比較すると最小は0003の600円。よって正解は です。
(補助的な見方)各商品の実質単価(閾値を満たす場合は割引後の単価、満たさない場合はそのままの単価)を計算すると:
  • 0001:30円×(1−0.30)=21円(適用) → 合計630円
  • 0002:25円(不適用) → 合計750円
  • 0003:40円×(1−0.50)=20円(適用) → 合計600円
  • 0004:35円(不適用) → 合計1050円

選択肢別の誤答解説

  • ア: 0001
    0001は割引後の単価が21円で合計630円。0003の600円より高いため誤りです。間違いやすい理由:閾値を満たしているため割引が効くが、割引率が0003ほど大きくない点を見落とすこと。
  • イ: 0002
    0002は単価が安く見えますが、閾値が40個で今回の購入数30個は満たさないため割引が受けられず、合計は750円になります。閾値条件を見落として「値引き率が40%だから有利」と考えると誤ります。
  • ウ: 0003
    正解。閾値20個を満たし、50%の大幅割引で合計が最も小さくなります。
  • エ: 0004
    値引き率が60%と大きいですが、閾値が35個で今回の30個は未満のため割引は不適用。合計は1050円で最も高くなります。閾値を満たすかどうかの確認がポイントです。

よくある誤解

  1. 割引は「1個ずつ」に適用されると誤解する
    実際は「合計価格」に対して割引率を掛けますが、合計に対して一括で割引することは、個あたりで見ると単価に割引を適用したのと等しくなります(今回のように計算可能)。
  2. 値引き数量と値引き率を混同する
    値引き数量は「何個以上で割引が適用されるか」の条件で、値引き率はどれだけ割り引くかです。特に閾値を満たしていない場合は、値引き率が大きくても割引は受けられません。
  3. 小数・パーセントの変換ミス
    50%を0.50と換算するのを忘れ、50倍してしまうミスがあります。パーセントは100で割って小数に直してください。

補足コラム

「閾値を満たすか?」の確認を最初にするだけでケアレスミスは減ります。実務でも「何個以上で割引」の条件はよくあるので、次の簡単な手順がおすすめです:
  1. 購入個数と値引き数量を比較する。
  2. 閾値を満たすなら「実質単価」=単価×(1−値引率) を計算。満たさないなら単価そのまま。
  3. 実質単価×購入個数で合計を出し、最小を選ぶ。
簡単な計算例(Python):
products = [
    ("0001", 30, 30, 0.30),
    ("0002", 25, 40, 0.40),
    ("0003", 40, 20, 0.50),
    ("0004", 35, 35, 0.60),
]
qty = 30
for pid, price, thresh, rate in products:
    if qty >= thresh:
        total = price * qty * (1 - rate)
    else:
        total = price * qty
    print(pid, total)
# 出力で0003が最小になる

FAQ

Q1. 「値引き数量以上」の「以上」はどう扱う?
A1. 「以上」は >=(以上を含む)です。今回の0001は閾値30で購入数30なので割引が適用されます。
Q2. 割引後の合計は小数になることはありますか?端数処理は?
A2. この問題では円未満の端数処理の指定がないため、計算通りの金額(ここではすべて整数)を使います。実務では端数処理(切り捨て、四捨五入など)を明示する場合があります。
Q3. 「合計価格に対して値引き」と「各単価を値引き」は同じですか?
A3. 結果的には同じです。合計に対して一括で割引すると、1個あたりの実質単価が同じ割合で下がります。

関連キーワード: 値引き、値引き数量、値引き率、単価、合計価格、割合計算、閾値判定、数量割引、端数処理、実質単価
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について