Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有限硬币的换币算法?_Algorithm_Sum_Combinations_Coin Change - Fatal编程技术网

Algorithm 有限硬币的换币算法?

Algorithm 有限硬币的换币算法?,algorithm,sum,combinations,coin-change,Algorithm,Sum,Combinations,Coin Change,我的程序的任务是计算所有可能获得T值的组合,以及一系列具有不同(和一些相同)值且数量有限的硬币 两种不同名称的硬币可能具有相同的价值,例如,“黄金”和“黄玉”硬币都具有3的价值 public static int change(int target, ArrayList<GemCoin> coinStocks) { int[] combi = new int[target + 1]; combi[0] = 1; for (GemCoin g: coinStoc

我的程序的任务是计算所有可能获得T值的组合,以及一系列具有不同(和一些相同)值且数量有限的硬币

两种不同名称的硬币可能具有相同的价值,例如,“黄金”和“黄玉”硬币都具有3的价值

public static int change(int target, ArrayList<GemCoin> coinStocks) {
    int[] combi = new int[target + 1];
    combi[0] = 1;
    for (GemCoin g: coinStocks) {
        for (int i = 1; i < combi.length; i++) {
            if (i >= g.getValue() && g.getStocks() > 0) {  ///if
                combi[i] += combi[i - d.getChips()];
            }
        }
    }
    for(int im : combi){
        System.out.println(im);
    }
    return combi[target];
}
公共静态int更改(int目标,数组列表coinStocks){
int[]combi=新int[目标+1];
combi[0]=1;
用于(GemCoin g:硬币库存){
对于(int i=1;i=g.getValue()&&g.getStocks()>0){///if
combi[i]+=combi[i-d.getChips()];
}
}
}
for(int-im:combi){
系统输出打印项次(im);
}
返回组合[目标];
}

这是我的一般想法,但我注意到,硬币库存在到达combi的最后一个指数之前“用完”,即使存在涉及该硬币的组合。

您说您的函数应该返回一个组合列表,但它返回一个整数。请您提供一些示例输入和所需输出。对不起,“多少”组合例如,黄玉(T)币为1美元,红宝石(R)币为1美元,蓝宝石(S)币为2美元,黄金(G)币为3美元。有4颗黄玉、1颗红宝石、1颗蓝宝石和1颗黄金。目标是4美元。为了实现这一点,您可以使用4T/3T1R/2T1S/1G,意思是4作为输出返回。您可以发布GemCoin类的代码吗?有6种组合:4T、3T1R、2T1S、1T11S、1T1G、1R1G。