- - PR -
お手本になるようなソースコード
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-10 11:33
たとえばいじわるですが、将来もしも2千円札が廃止されて代わりに8千円札が登場した場合、6万4千円を支払うとき、困りませんか? これを、お題 Ver.2 とします。w -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||||||
|
投稿日時: 2007-05-10 11:34
んじゃあbashで。
#! /bin/bash units=(10000 5000 1000 500 100 50 10 5 1) function out() { [ $1 -gt 0 ] || return local unit=${units[$2]} local count=$(($1 / $unit)) [ $count -gt 0 ] && echo "$unit=$count" out $(($1 - (unit * count))) $(($2 + 1)) } out 56547 0 ロジックはかつのりさんのものをお借りしました。 おおっ。bashって再帰も行けるんだw #[code]使おうとしたら$1が消えた。。 | ||||||||||||
|
投稿日時: 2007-05-10 11:48
何が困るのかよくわからないのですが、 2000の項目を削除して、10000と5000の間に8000を追加すればよいのではないでしょうか? | ||||||||||||
|
投稿日時: 2007-05-10 11:51
64000円を、 「10000円札6枚 + 1000円札4枚 = 10枚」 で支払うより 「8000円札8枚 = 8枚」 で払ったほうが少なく済む、と言うことだと思います。 | ||||||||||||
|
投稿日時: 2007-05-10 11:53
8000 x 8が最小だから困るのかな
| ||||||||||||
|
投稿日時: 2007-05-10 12:32
8000*8は考えがなかったっすね。面白い。
| ||||||||||||
|
投稿日時: 2007-05-10 12:35
いや、最小枚数は
10000円×4枚+8000円×3枚 合計7枚が最小では? つまり、上位金額[紙幣または硬貨]が下位金額の倍数[紙幣または硬貨]に なっていない場合は、それなりにアルゴリズムは難しそう。 日本の現在の発行紙幣通貨は、 上位金額[紙幣または硬貨]が下位金額の倍数[紙幣または硬貨]を満足しているが。 ####加筆訂正 ↑上記のように満足していると書いたものの、 よく考えたら2000円札の存在をすっかり忘れていたよ。 ここ5年くらい、財布の中に入っていた試しが無い。 [ メッセージ編集済み 編集者: platini 編集日時 2007-05-10 12:37 ] [ メッセージ編集済み 編集者: platini 編集日時 2007-05-10 20:04 ] | ||||||||||||
|
投稿日時: 2007-05-10 12:36
釣りだったら大漁ですね。
>こんばんは。日頃この会議室は参考にさせて頂いております。 ってわりには初投稿だし、お題もどこかの学校の課題みたい。 新手の「宿題を代わりに解いて」に見える私はひねくれ者? どうせなら、最近話題の「Fizz-Buzz問題」を拡張してみるとかどうですか。 (拡張例) 表示する最小値、最大値、n1の倍数のときs1を表示、n2の倍数のときs2を表示...(以降任意の組)を自由に設定できるようにする。 |