我试图解决这个问题,给定一定面额的硬币,我想找到最大数量的硬币来找零。
示例假设我得到了价值 3 和 5 的硬币,我想找 15 的硬币,解决方案是 {3,3,3,3,3}(感谢 JoSSte 指出)同样,假设价值 3 和 5 的硬币,我想找 7 的硬币,我需要显示“No solution possible”
我能够做到这一点以找到最少的硬币数量,如下所示
import java.util.ArrayList;
import java.util.Arrays;
public class Minimum
{
static int[] options = {5,3};
public static void main(String[] args)
{
ArrayList<Integer> result = new ArrayList<Integer>();
result = fun(15);
if(result.size() == 999)
System.out.println("Not possible to make change with this denomination");
else
{
for(int i = 0;i<result.size();i++)
System.out.print(result.get(i));
}
}
static ArrayList<Integer> fun(int n)
{
if(n == 0)
{
ArrayList<Integer> totalret = new ArrayList<Integer>();
return totalret;
}
if(n < 0)
{
ArrayList<Integer> totalret = new ArrayList<Integer>(Arrays.asList(new Integer[999]));
return totalret;
}
ArrayList<Integer> totalret = new ArrayList<Integer>(Arrays.asList(new Integer[999]));
for(int i = 0;i<options.length;i++)
{
ArrayList<Integer> reci = fun(n-options[i]);
ArrayList<Integer> reti = new ArrayList<Integer>();
reti.addAll(reci);
reti.add(options[i]);
if(reti.size() < totalret.size())
totalret = reti;
}
return totalret;
}
}
请注意,我有一个名为 if(n<0) 的检查,其中不加总和的组合通过将它们的大小设置为不能是最小值的非常大的数字从选项中删除。
但是,我怎样才能修改上面找到最大的硬币数量