找錢問題 不知道能不能在這邊問~ - 推理遊戲
By Donna
at 2007-04-18T02:14
at 2007-04-18T02:14
Table of Contents
實際程式化的話是這樣,以{25, 20, 10, 5, 1}來說:
// 隔這個define去取data[a]的值只不過預防取到a < 0,其中MAX_INT是個很大的值
// ,使得如果取到a < 0時給出很大的值,就會直接被min捨棄掉
#define DATA(a) ((a >= 0) ? (data[a]) : (MAX_INT))
// 價值0時用的硬幣數為0
data[0] = 0;
// 從價值1開始跑到MAX_NUM
for(i = 1; i < MAX_NUM; i++)
{
// 某價值所需最少硬幣,就是扣掉各個幣值後的各個價值中,選用幣數最少的那個
// 加上1
data[i] = 1 + min(DATA(i - 25), DATA(i - 20), DATA(i - 10), DATA(i - 5),
DATA(i - 1));
}
主程式這樣就搞定了,跑完data[x]就是代表x這個價值需要多少硬幣。
令m為錢幣種類數、n為要算的最大價值的話,這程式時間複雜度是O(mn),會遠
比用多層迴圈硬幹的O(n^m)好上太多。
--
「去質疑親眼所見的事是最愚昧的行為。這又分為兩種--質疑自己所見是不是
真的,或是用見到的事去質疑沒見到的事。呵。」
--芙莉雅,謊言事務所實現使者
--
// 隔這個define去取data[a]的值只不過預防取到a < 0,其中MAX_INT是個很大的值
// ,使得如果取到a < 0時給出很大的值,就會直接被min捨棄掉
#define DATA(a) ((a >= 0) ? (data[a]) : (MAX_INT))
// 價值0時用的硬幣數為0
data[0] = 0;
// 從價值1開始跑到MAX_NUM
for(i = 1; i < MAX_NUM; i++)
{
// 某價值所需最少硬幣,就是扣掉各個幣值後的各個價值中,選用幣數最少的那個
// 加上1
data[i] = 1 + min(DATA(i - 25), DATA(i - 20), DATA(i - 10), DATA(i - 5),
DATA(i - 1));
}
主程式這樣就搞定了,跑完data[x]就是代表x這個價值需要多少硬幣。
令m為錢幣種類數、n為要算的最大價值的話,這程式時間複雜度是O(mn),會遠
比用多層迴圈硬幹的O(n^m)好上太多。
--
「去質疑親眼所見的事是最愚昧的行為。這又分為兩種--質疑自己所見是不是
真的,或是用見到的事去質疑沒見到的事。呵。」
--芙莉雅,謊言事務所實現使者
--
Tags:
推理遊戲
All Comments
By Donna
at 2007-04-19T00:27
at 2007-04-19T00:27
By Kyle
at 2007-04-20T09:31
at 2007-04-20T09:31
By Belly
at 2007-04-22T08:48
at 2007-04-22T08:48
By Skylar DavisLinda
at 2007-04-26T17:43
at 2007-04-26T17:43
By Gilbert
at 2007-04-29T10:10
at 2007-04-29T10:10
By Iris
at 2007-05-04T02:38
at 2007-05-04T02:38
By Hamiltion
at 2007-05-05T01:47
at 2007-05-05T01:47
By Elizabeth
at 2007-05-08T15:16
at 2007-05-08T15:16
By Irma
at 2007-05-08T22:41
at 2007-05-08T22:41
Related Posts
找錢問題 不知道能不能在這邊問~
By Carolina Franco
at 2007-04-18T00:58
at 2007-04-18T00:58
找錢問題 不知道能不能在這邊問~
By Elma
at 2007-04-17T23:51
at 2007-04-17T23:51
找錢問題 不知道能不能在這邊問~
By Wallis
at 2007-04-17T12:38
at 2007-04-17T12:38
找錢問題 不知道能不能在這邊問~
By Kelly
at 2007-04-17T03:49
at 2007-04-17T03:49
找錢問題 不知道能不能在這邊問~
By Jacky
at 2007-04-17T00:07
at 2007-04-17T00:07