4
0

問題: みかんを重さごとに仕分ける

入力:

  1. 仕分ける重さの区切りを表す整数 N
  2. みかんの個数を表す整数 M
  3. 各みかんの重さ w_1 から w_M

出力:

  • 各みかんを最も近い重さに仕分け、その重さを出力

アプローチ:

  1. 標準入力から N, M と各みかんの重さを読み込む
  2. 各みかんの重さについて、仕分け先の重さを計算
  3. 仕分け先の重さを出力

コード:

def classify_oranges(weight, num_oranges, oranges):
    # 各みかんの重さに対して仕分け先の重さを計算して出力
    for orange in oranges:
        # もし、みかんの重さがweight以下ならweightの箱に仕分け
        if orange <= weight:
            print(weight)
        else:
            # みかんの重さに最も近い下の区切りの重さを計算
            lower_bound = (orange // weight) * weight
            # みかんの重さに最も近い上の区切りの重さを計算
            upper_bound = lower_bound + weight
            
            # みかんの重さがlower_boundとupper_boundのどちらに近いかを判断
            if (orange - lower_bound) < (upper_bound - orange):
                print(lower_bound)
            else:
                print(upper_bound)

# 標準入力からデータを読み込む
import sys
input = sys.stdin.read().strip().split()
N = int(input[0])  # 仕分ける重さの区切り
M = int(input[1])  # みかんの個数
oranges = [int(input[i + 2]) for i in range(M)]  # 各みかんの重さリスト

# みかんを仕分ける
classify_oranges(N, M, oranges)

コードの説明:

  1. 関数 classify_oranges の定義:

    • weight: 仕分ける重さの区切り
    • num_oranges: みかんの個数
    • oranges: 各みかんの重さのリスト
  2. みかんの重さに対する仕分け先の重さの計算:

    • 各みかんの重さ orange に対して以下の処理を行います:
      • もし orangeweight 以下なら、そのまま weight の箱に仕分けします。
      • そうでない場合、orange に最も近い下の区切りの重さ lower_bound と、上の区切りの重さ upper_bound を計算します。
      • orangelower_bound および upper_bound の距離を比較し、近い方の重さの箱に仕分けます。同じ距離の場合は upper_bound を選択します。
  3. 結果の出力:

    • 各みかんの仕分け先の重さを順に出力します。

このプログラムは、与えられた各みかんの重さを最も近い重さに仕分けし、その結果を正確に出力します。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0