Comme une affectation pour mon cours sur la conception et l'analyse des algorithmes, on m'a demandé de déterminer le nombre minimum de pièces de monnaie nécessaires à la modification, à l'aide d'une approche gourmande. J'ai proposé cette approche intuitive:
#include<stdio.h> #include<stdlib.h> int main(){ int hundreds=0,tens=0,ones=0,sum=0; printf("Enter a sum of money in range 1 to 999\n"); scanf("%d",&sum); while(sum!=0) { if (sum<10&&sum>=1){ ones=sum/1; sum-=ones; } else if(sum>=10&&sum<100){ tens=sum/10; sum-=tens*10; } else if(sum>=100&&sum<=999){ hundreds=sum/100; sum-=hundreds*100; } else{ printf("Error"); exit(0); } } printf("%d $100, %d $10, %d $1",hundreds,tens,ones); return 0; }
3 Réponses :
Votre code n'est pas suffisant gourmand car cela peut être pire: compilation et exécution: p> Comment puis-je prouver que le programme est correct p>
blockQuote> A (gourmand) pour prouver que le code est correct est d'utiliser la force brutale pour vérifier le résultat de 1 à 999: P>
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra g.c
pi@raspberrypi:/tmp $ ./a.out
all ok
Comment ces questions répondent-elles?
@Jeffuk Réponse corrigé pour faire plus gourmand ...
Ceci est vraiment une approche gourmande, mais vous devez inverser l'ordre de si, alors, autre. En général, gourmand em> signifie consommer au moment actuel la plus grande quantité que vous pouvez consommer. Vous devez vérifier d'abord pour la plus grande pièce de monnaie. Il n'y a pas besoin de boucle. p>
Le code proposé suivant:
et maintenant, le code proposé: p> Le code proposé ignore les factures (américaines) 50 $, 20 $, 5 $, 5 $ et 2 $ P> p>
Qui vous a dit d'utiliser une approche gourmande? L'avez-vous demandé ce qu'ils entendent par «une approche gourmande»?
Cela peut être résolu sans boucle; Dans chaque itération, exactement 1 des cas sera vrai et ne sera jamais vrai dans aucune itération future.
Alors que le compilateur ne se soucie pas des espaces, des lignes vides, une indentation ou des commentaires, ces choses sont très importantes pour les humains qui tentent de lire et de comprendre votre code.
Par "une approche gourmande", je veux dire un algorithme gourmand. Ce programme utilise donc un algorithme gourmand? Comment puis-je le prouver?
@Divyanshuvarma Il n'y a pas de limite sur le gourmand car il est possible d'ajouter tout calcul inutile, mais il est facilement possible de faire plus de gourmand, regarde ma réponse
Depuis la question concerne le nombre minimum de pièces de monnaie. Discutons-nous des livres anglaises ou des pièces américaines ou autre chose?
OT: Concernant:
scanf ("% d", et somme); code> Vérifiez toujours la valeur renvoyée (pas les valeurs de paramètre) pour assurer que l'opération a été réussie