私はブルートフォース方式を使って最も効率的に変更する方法を見つけるプログラムを書く必要があります。私はちょっと混乱しているし、もし私が正しい道を歩いているなら、私は好奇心が強い。私はC言語で書いています。私は変更作成時にブルートフォースアルゴリズムをコーディングしていますが、ちょっと立ち往生しています
貪欲アルゴリズムは使用しません。
私はすべてが混乱しています。最終的には、toonie、loonie、quarter、dimes、nickels、penniesの順番で最も効率的な変更を出力する必要があります。 (1 1 0 0 1のように)
正しい軌道に乗っていますか?私は自分が何をしているのか少し混乱しています.6つのループは明らかに鍵です。私はそれぞれの反復を追加していますが、概念的に何が起こっているのかは少し混乱しています。
#include <stdio.h>
int main(int argc, char *argv[]) {
//Input
int amount = 336;
int bestSolution = amount;
//Coins
int toonies = 0, loonies = 0, quarters = 0, dimes = 0, nickels = 0, pennies = 0;
int amountAfterToonies, amountAfterLoonies, amountAfterQuarters, amountAfterDimes, amountAfterNickels;
//Counters
int i, j, k, l, m, n;
for (i = 0; i < amount/200; i++) { //Finds amount
toonies++;
amountAfterToonies = amount % 200;
for (j = 0; j < amountAfterToonies/100; j++) {
loonies++;
amountAfterLoonies = amountAfterToonies % 100;
for (k = 0; k < amountAfterLoonies/25; k++) {
quarters++;
amountAfterQuarters = amountAfterLoonies % 25;
for (l = 0; l < amountAfterQuarters/10; l++) {
dimes++;
amountAfterDimes = amountAfterQuarters % 10;
for (m = 0; m < amountAfterDimes/5; m++) {
nickels++;
amountAfterNickels = amountAfterDimes % 5;
for (n = 0; n < amountAfterNickels; n++) {
pennies++;
sum = toonies + loonies + quarters + dimes + nickels + pennies;
if (sum < bestSolution) {
bestSolution = sum;
}
}
}
}
}
}
}
printf("%d %d %d %d %d %d\n", toonies, loonies, quarters, dimes, nickels, pennies);
printf("%d\n", bestSolution);
return 0;
}
私はあなたが設定したループのためにあなたを持っているか再考をお勧めします。実際には、forループを完全に再考してください。また、最初にtoonyiesを見つけてから、looniesを見つけるなどしてください。 –
「最も効率的」という定義は何ですか?これは一連のオプションを実行してそれらを印刷しますが、どこにいても決断を下すことはありません。 – John3136
最も効率的なのは、最小のコインしか使用できないことです。たとえば、113セントは1ルーニ、1ポンド、3ペニーとなります。 –