こんにちは、
私は現在、バックトラックアルゴリズムを使用して、特定の金額に達するまでに必要なコインの総数の解決策を見つける必要があるプログラムに取り組んでいます。
プログラムの基本的なレイアウトはこちらです
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;
}
}
}
よろしく、マイク