【发布时间】:2015-09-13 16:41:33
【问题描述】:
我想到了以下问题:
假设有一位受人尊敬的音乐家退休了。音乐家不时收到他们过去录音的版税支票。音乐家的版税支票总是以:
1 美元、5 美元、8 美元、12 美元、17 美元、20 美元、42 美元、100 美元或 200 美元
这意味着音乐家只收到上面指定金额的版税支票。我想知道,我将如何计算音乐家可以获得 1,000 美元的报酬的可能方式总数?在这个问题中有一些限制/允许的假设。它们是:
(1) 音乐家获得 1,000 美元的“支票”总额没有上限。例如,音乐家可以收到 1,000 张 1 美元支票、5 张 200 美元支票,或 10 张 20 美元支票和 4 张 200 美元支票等。
(2) 正如 (1) 所暗示的,您可以收到任何支票的倍数(事实上,所有单一支票选项的总和总计 405 美元,因此这个条件必须积累 1,000 美元)。
(3) 顺序很重要。获得报酬 200 美元、200 美元、100 美元、100 美元、100 美元、100 美元、100 美元和 100 美元与 100 美元、100 美元、100 美元、100 美元、100 美元、100 美元、200 美元和 200 美元是不同的“解决方案”,这也是不同的“解决方案”超过 200 美元、100 美元、100 美元、200 美元、100 美元、100 美元、100 美元和 100 美元,即使这两种解决方案都包含 6 张 100 美元支票和 2 张 200 美元支票。请记住,音乐家“不时地”获得有偿支票,因此支票接收的顺序使得不同解决方案(排列)的可能性成为可能。
我感兴趣的是只找到解决这个问题的解决方案的总数,而不是打印出来。
这是我目前的方法:
定义表示检查可能性的变量(例如 x1 = 1、x2=5、x3 = 8 等)
加入一些 if-then 语句,检查一组 x1、x2、x3...xn 的倍数是否等于 1000
如果是,则将某个计数器变量加 1
一旦所有迭代都用完/所有循环边界都完成,显示计数器值。
但是,我不知道如何将 x1、x2、x3 及其排列合并到给定的方程中,也不知道如何求解这样的方程。
【问题讨论】:
-
总是有一张 1 美元的支票吗?所有其他检查都是最小检查的整数倍吗?
-
不,并不总是有 1 美元的支票。一直有一张 1 美元的支票会减少很多“目标金额”整数倍的可能性,比如 5 张 200 美元的钞票或 125 张 8 美元的钞票。
标签: algorithm matlab constraints permutation