46_6_7
@46_6_7

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python for文

解決したいこと

数字を入力した際、(今回の場合は314)
答えとしては11になるはずなのですが、8と返ってきます。
コードの add = min( add,coins[i])以下の記述を書き換えれば解決するのかと思っておりますが、どこを変えれば良いのかもわかっておりませんので教えて頂きたいです。

問題

50 円玉, 10円玉, 5 円玉, 1円玉がそれぞれ A0,A1,A2,A3枚あります。

これらを用いて X 円を支払うとき、最小で何枚の硬貨が必要ですか。
ただし、支払い方は少なくとも 1 つ存在することが保証されています。

該当するソースコード

X = int(input())
A = list(map(int, input().split()))

# コインの金額
coins = [50, 10, 5, 1]

res = 0
for i in range(4):
    add = X // coins[i] #addにはXをそれぞれリストで割った値が入っている。6,31,62,314
    # print(add)
    # 枚数制限を考慮してコインの使用枚数を求める
    add = min( add,coins[i])
    # print(add) 6,10,5,1
    res += add
# print(res) resには上記の6,10,5,1の足した数が入っている。

    # 残り金額を求める
    X -= coins[i] * add

# 出力
print(res)

自分で試したこと

print文を使って変数の値を調べたのですが、解決に至らずです。

0

1Answer

A = list(map(int, input().split()))

この A を使っていないのが原因では?

    add = min( add,coins[i])

ここを修正:

    add = min( add,A[i])
0Like

Comments

  1. @46_6_7

    Questioner

    上記のように修正すると
    IndexError: list index out of rangeと出ます。
    range()の値が違うためエラーが出たのかと思いましたがそうでもないようです。
    何がいけないのでしょうか?
  2. 314
    6 1 0 4

    のように金額とコイン4種類の枚数を入力しましたか?
  3. @46_6_7

    Questioner

    すみません、そのように入力せず、314しか入力してませんでした。
    上記のように入力したら解決しました。

Your answer might help someone💌