Eeehm jeg har prøvet nogle forskellige ting men jeg kan ikke rigtig finde ud af det ..
Jeg har en del mønter til brug :
10 stk a 5,00 kr's mønter. 20 stk a 10,00 kr's mønter. 5 stk a 2,00 kr's mønter. 20 stk a 20,00 kr's mønter.
Jeg kompiler programmet, indtaster prisen på en trøje som fx 50 kr. Så står der nu :
" Trøjen koster 50 kr "
Så skal programmet automatisk sige at jeg skal bruge " 5 stk a 10,00 kr mønter ", som så giver 50 kr, eller " 2 stk a 20,00 kr's mønter og 1 stk a 10 kr's mønter.." Bare den kommer med det rigtige svar.. Håber nogen kan hjælpe.
Har du fået løst problemet? Hvis ikke, har jeg skrevet en bitte algoritme som løser dit problem, og som modsat bertelbranders forslag altid returnerer det korrekte resultat. Det er nok lidt svært at gennemskue hvad den laver (den benytter en teknik kaldet dynamisk programmering), men du kan bare sige til hvis du vil have en nærmere forklaring.
#include <iostream> #include <limits.h>
#define N 4 //antal forskellige mønter
int coin_value[N] = {20,10,5,2}; //mønternes værdier int coin_has[N] = {20,20,10,5}; //disponible mønter af de forskellige slags int solution[N] = {0,0,0,0}; //løsningen
Det der giver den letteste kode er vel bare at prøve alle muligheder: Start med en 2 kr. Så er der 48 kr tilbage. Så starter du igen med 2 kr. Så er der 46... Så tager du en 5 så er der 45 kr tilbage, så tager du en 2 kr ...
Løsninger er selvf dem hvor du ender med 0 til sidst. Ender du med noget negativt er duer sekvensen af mønter ikke.
Man kan ikke bruge stl eller iostreams i C, men der er næsten ikke nogen der programmer i C i vore dage. Det er ret let at lave eksemplerne om til ren C, hvis det ønskes.
tuxic har ret i at man selvfølgelig kan prøve alle muligheder. Udover at det er en ret ineffektiv måde at løse problemet på, giver det ikke nødvendigvis en optimal løsning i forhold til hvor mange mønter man betaler med. Så ønsker man at betale med så få mønter som muligt er man nødt til bruge dynamisk programmering (eller lignende) for at løse problemet.
jimbo22: det kan vist ikke være rigtigt. Hvis man prøver alle muligheder må man også prøve den optimale. Man kan overveje om dette er en variant af rygsækproblemet (tror jeg det er) og så fald er der næppe andre muligheder end at prøve alle.
bertelbrander: I know, men efterspurgte needhelpnow ikke løsninger i C?
tuxic: jo ok, hvis man prøver alle muligheder og altså fortsætter søgningen selv efter man har fundet en gyldig løsning vil man finde den optimale løsning, problemet er jo bare at metoden har en udførselstid på O(2^n) hvor n er det samlede antal mønter (ikke kun antal mønter af forskellig værdi) hvilket er utilgiveligt langsomt, og her snakker vi ikke kun worst case men også best case. Slutteligt, hvis du sætter dig ned og funderer lidt over problemet vil du se at det faktisk kan løses med dynamic programming (og at min løsning er korrekt).
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.