- PR -

お手本になるようなソースコード

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-05-10 11:33
引用:

nagiseさんの書き込み (2007-05-10 11:03) より:
だから紙幣・硬貨について配列で定義しているわけですよね。
変更がありそうな箇所は一箇所にまとめてメンテナンス性を確保しているわけです。
米ドルにするのであれば
int[] units = new int[]{10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1};
となりますし。


たとえばいじわるですが、将来もしも2千円札が廃止されて代わりに8千円札が登場した場合、6万4千円を支払うとき、困りませんか?

これを、お題 Ver.2 とします。w

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 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が消えた。。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-05-10 11:48
引用:

unibonさんの書き込み (2007-05-10 11:33) より:
引用:

nagiseさんの書き込み (2007-05-10 11:03) より:
だから紙幣・硬貨について配列で定義しているわけですよね。
変更がありそうな箇所は一箇所にまとめてメンテナンス性を確保しているわけです。
米ドルにするのであれば
int[] units = new int[]{10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1};
となりますし。


たとえばいじわるですが、将来もしも2千円札が廃止されて代わりに8千円札が登場した場合、6万4千円を支払うとき、困りませんか?



何が困るのかよくわからないのですが、
2000の項目を削除して、10000と5000の間に8000を追加すればよいのではないでしょうか?
orz
会議室デビュー日: 2006/09/14
投稿数: 9
お住まい・勤務地: 東京
投稿日時: 2007-05-10 11:51
引用:

よねKENさんの書き込み (2007-05-10 11:48) より:
引用:

unibonさんの書き込み (2007-05-10 11:33) より:
引用:

nagiseさんの書き込み (2007-05-10 11:03) より:
だから紙幣・硬貨について配列で定義しているわけですよね。
変更がありそうな箇所は一箇所にまとめてメンテナンス性を確保しているわけです。
米ドルにするのであれば
int[] units = new int[]{10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1};
となりますし。


たとえばいじわるですが、将来もしも2千円札が廃止されて代わりに8千円札が登場した場合、6万4千円を支払うとき、困りませんか?



何が困るのかよくわからないのですが、
2000の項目を削除して、10000と5000の間に8000を追加すればよいのではないでしょうか?




64000円を、
「10000円札6枚 + 1000円札4枚 = 10枚」
で支払うより
「8000円札8枚 = 8枚」
で払ったほうが少なく済む、と言うことだと思います。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2007-05-10 11:53
8000 x 8が最小だから困るのかな
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-05-10 12:32
8000*8は考えがなかったっすね。面白い。
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2007-05-10 12:35
いや、最小枚数は
10000円×4枚+8000円×3枚
合計7枚が最小では?

つまり、上位金額[紙幣または硬貨]が下位金額の倍数[紙幣または硬貨]に
なっていない場合は、それなりにアルゴリズムは難しそう。

日本の現在の発行紙幣通貨は、
上位金額[紙幣または硬貨]が下位金額の倍数[紙幣または硬貨]を満足しているが。

####加筆訂正
↑上記のように満足していると書いたものの、
よく考えたら2000円札の存在をすっかり忘れていたよ。
ここ5年くらい、財布の中に入っていた試しが無い。


[ メッセージ編集済み 編集者: platini 編集日時 2007-05-10 12:37 ]

[ メッセージ編集済み 編集者: platini 編集日時 2007-05-10 20:04 ]
未記入
常連さん
会議室デビュー日: 2005/05/07
投稿数: 32
投稿日時: 2007-05-10 12:36
釣りだったら大漁ですね。

>こんばんは。日頃この会議室は参考にさせて頂いております。

ってわりには初投稿だし、お題もどこかの学校の課題みたい。
新手の「宿題を代わりに解いて」に見える私はひねくれ者?

どうせなら、最近話題の「Fizz-Buzz問題」を拡張してみるとかどうですか。

(拡張例)
表示する最小値、最大値、n1の倍数のときs1を表示、n2の倍数のときs2を表示...(以降任意の組)を自由に設定できるようにする。

スキルアップ/キャリアアップ(JOB@IT)