Мне нужно написать программу, которая использует метод грубой силы, чтобы выяснить, как сделать изменения наиболее эффективно. Я немного смущен и мне любопытно, если я на правильном пути. Я пишу это на языке C.
Не использует жадный алгоритм.
Меня просто смущает, вот и все. В конце он должен вывести наиболее эффективные изменения: туни, луни, квартал, десять центов, никелей, пенни в указанном порядке. (Нравится 1 1 0 0 1 0.)
Я на правильном пути? Я немного сбит с толку относительно того, что я делаю, шестерка для циклов, очевидно, является ключом, и я добавляю каждую итерацию, но относительно того, что происходит концептуально, я немного запутался.
#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;
}