下午好,Java的回溯与硬币
我目前的工作是应该用一个回溯算法找到硬币将需要达到一定的金额总数的解决方案的程序。
该方案的基本布局是这样的
User is prompted for an amount (ie. 123)
int amount = input.nextInt();
User is prompted for number of coins (ie. 6)
int numCoins = input.nextInt();
User is prompted for coin values (ie. 2, 4, 32, 51, 82)
int[] array = new array[] {2, 4, 32, 51, 82};
从这些信息中,我开发一个回溯算法输出解决方案。
我曾尝试查找回溯信息,但无济于事。对我来说,这一切似乎都很不清楚 我正好想到从算法开始。
任何帮助表示赞赏。
编辑
这是目前我一直在努力......这是目前没有工作
public class coins
{
public static int[] coinValues;
public static int currentAmount = 0;
public static void main(String[] args)
{
ArrayList<Integer> temp = new ArrayList<>();
Scanner input = new Scanner(System.in);
System.out.println("Please enter the amount: ");
int amount = input.nextInt();
System.out.println("Please enter the number of coins: ");
int numCoins = input.nextInt();
coinValues = new int[numCoins];
for (int i = 0; i < numCoins; i++)
{
System.out.println("Please enter coin value of " + i + " :");
int value = input.nextInt();
coinValues[i] = value;
}
for (int i = 0; i < coinValues.length; i++)
{
System.out.print("Coin Value: " + i + " " + coinValues[i] + "\n");
}
tryThis(temp, amount);
for (int i = 0; i < temp.size(); i++)
{
System.out.println(temp.get(i) + " " + " ");
}
}
public static ArrayList<Integer> tryThis(ArrayList<Integer> list, int amount)
{
if (isValid(list, amount) == false)
{
while (amount > currentAmount && (amount > 0))
{
for (int i = 0; i < coinValues.length; i++)
{
for (int k = coinValues.length - 1; k > 0; k--)
{
list.add(coinValues[k]);
int currentCoin = list.get(i);
if (amount > currentAmount)
{
amount = amount - currentCoin;
System.out.println("Amount: " + amount);
}
tryThis(list, amount);
}
}
}
}
return new ArrayList<>();
}
public static boolean isValid(ArrayList list, int amount)
{
boolean keepGoing = true;
if (amount > currentAmount)
{
return keepGoing = false;
}
else
{
return keepGoing;
}
}
}
的问候, 迈克
请做一些研究和向下缩小问题的一个具体问题。 – 2013-03-20 17:40:46
你是否必须使用回溯来做到这一点,或者你可以使用贪婪算法吗? – 2013-03-20 17:47:58
该项目包括3个部分(回溯,贪婪和动态),其中我基本上需要解决同样的问题。 – fisherml 2013-03-20 17:49:25