Résultat de l’expression Algorithme Greedy inutilisé

J’ai exécuté ce programme et j’obtiens le résultat de l’expression d’erreur inutilisé. Je fais peut-être quelque chose de simplement faux, mais j’ai passé la journée à essayer de comprendre en vain. Toute aide que vous pouvez fournir est grandement appréciée.

#include  #include  int main() { int x, y = 0; printf("Enter the amount of change "); x = GetFloat() * 100; while (x != 0) { if (x >= 25) { x - 25; y = y + 1; } if (x >= 10 && x = 5 && x = 1 && x < 5) { x - 1; y= y + 1; } } printf("The number of coins neccessary is %d", y); } 

  if (x >= 25) { x - 25; // This accomplishes nothing y = y + 1; } if (x >= 10 && x < 25) { x - 10; // This accomplishes nothing } y = y + 1; if (x >= 5 && x < 10) { x - 5; // This accomplishes nothing } y = y + 1; if (x >= 1 && x < 5) { x - 1; // This accomplishes nothing y= y + 1; } 

Dans chacune de ces lignes, vous soustrayez un nombre à x , mais vous ne faites rien avec le résultat. Si vous essayez de mettre à jour x avec le résultat, vous devez procéder comme vous le faites avec y et mettre x = devant l'expression.

Donc si vous voulez que x descende de 25 , vous devriez écrire:

 x = x - 25; 

Alternativement, vous pouvez écrire le raccourci:

 x -= 25; // Note the equal sign 

Tous les 4 énoncés x – 25, x – 10, x – 5, x – 1 s’avéreront inutiles à moins d’atsortingbuer cette valeur à x; Parce que vous essayez de soustraire la valeur de x, mais que vous n’atsortingbuez pas la nouvelle valeur à x.

Voici la solution de votre problème:

 #include  #include  int main() { int x, y = 0; printf("Enter the amount of change "); x = GetFloat() * 100; while (x != 0) { if (x >= 25) { x = x - 25; //or x-=25; y = y + 1; } if (x >= 10 && x < 25) { x = x - 10; //or x-=10; y = y + 1; } if (x >= 5 && x < 10) { x = x - 5; //or x-=5; y = y + 1; } if (x >= 1 && x < 5) { x = x - 1; //or x-=1; or x--; or --x; :) y = y + 1; } } printf("The number of coins neccessary is %d", y); } 

Je restrais convaincu de la structure de votre boucle. Il y a l’opérateur de division qui peut être utilisé à bon escient:

 int total = 0; int ncoins; int amount = GetFloat() * 100; assert(amount >= 0); ncoins = amount / 25; total += ncoins; amount -= ncoins * 25; assert(amount < 25); ncoins = amount / 10; total += ncoins; amount -= ncoins * 10; assert(amount < 10); ncoins = amount / 5; total += ncoins; amount -= ncoins * 5; assert(amount < 5); total += amount; 

C'est écrit à la main; vous pouvez aussi concevoir une boucle:

 int values[] = { 25, 10, 5, 1 }; enum { N_VALUES = sizeof(values) / sizeof(values[0]) }; int total = 0; int ncoins; int amount = GetFloat() * 100; assert(amount >= 0); for (int i = 0; i < N_VALUES && amount > 0; i++) { ncoins = amount / values[i]; total += ncoins; amount -= ncoins * values[i]; } assert(amount == 0);