Hertz Posted August 26, 2009 Report Posted August 26, 2009 Daca vrei sa cumperi ceva cu mai putin de 100 Euro , poti plati cu diferite 'unitati' (monede si bancnote).In momentul de fata cele mai bune 6 unitati existente pentru a fii folosite sunt: 1,2,5,10,20 si 50.Daca vrei sa cumperi ceva cu mai putin de 100 Euro, trebuie sa folosesti unele din aceste monede pentru a plati.Acum sa mergem la cumparaturi cu aceste 6 unitati.Vei cauta produse care costa de la 1 Euro la 99 Euro si vei cumpara cate unul din fiecare.De fiecare data cand cumperi, folosesti cat mai putine unitati posibile (ai un numar infinit de unitati).Sa vedem cat de multe unitati ne trebuie daca folosim unitatile 1,2,5,10,20 si 50.1 Euro => doar 1 unitate: 12 Euro => 1 unitate : 23 Euro => 2 unitati : 1+2..98 Euro => 6 unitati : 1+2+5+20+20+5099 Euro => 6 unitati : 2+2+5+20+20+50Acum vom lua media unitatilor folosite intre 1 si 99 , care e de 3,4 unitati.E destul de bine, insa se poate si mai bine...Cerinta ta este sa gasesti cea mai mica medie posibila folosind 6 unitati diferite (intregi).Poate o moneda de 3 euro e o idee buna?Sau o bancnota de 22 euro?Succes! Quote
Patrunjel Posted October 2, 2010 Report Posted October 2, 2010 (edited) Nu prea inteleg cerinta...adica a doua parte (cea de dupa exemplu) nu o inteleg deloc.Ignorand a doua parte, am scos asta #include<iostream>using namespace std;int main(){ int i,eur[6],a,j; for(i=0;i<6;i++){ cout<<"Moneda "<<i+1<<": ";cin>>eur[i];} cout<<endl<<endl; for(i=1;i<100;i++){ cout<<endl; a=i; cout<<a<<" Euro =>"; for(j=5;j>=0;j--) while(a>=eur[j]){ cout<<eur[j]<<"+"; a-=eur[j];}} return 0;}Sper sa fie ok.LE: Stiu ca + -ul ala de dupa fiecare suma e aiurea, insa nu prea mi-au venit idei cum sa fac altfel, decat cu vreo matrice sau ceva, insa complicam aiurea.Alt LE: Te referi cumva la numarul_total_de_bancnote_folosite / 99 ?...Cred ca la asta te refereai, acuma vad, dupa ce am scris sursa.Deci v2: #include<iostream>using namespace std;int main(){ int i,eur[6],a,j,nr=0; double med; for(i=0;i<6;i++){ cout<<"Moneda "<<i+1<<": ";cin>>eur[i];} cout<<endl<<endl; for(i=1;i<100;i++){ a=i; for(j=5;j>=0;j--) while(a>=eur[j]){ nr++; a-=eur[j];}} med=nr/99.0; cout<<"Media este : "<<med; return 0;} Si nu, nu se poate mai bine, atata timp cat exista o bancnota de 1 euro (si trebuie sa existe, ca sa poti cumpara produsul care costa 1 euro). Cred Edited October 2, 2010 by Patrunjel Quote
begood Posted October 3, 2010 Report Posted October 3, 2010 din moment ce nimeni n-a raspuns, e ok sa deschizi topicul.intrebarea mea e urmatoarea : trebuie sa adaugi o moneda la cele deja existente ?sau sa iti faci tu alte monede.seria 1,2,4,8,16,32,64 nu ar fi ideala ? Quote
huale768 Posted October 5, 2010 Report Posted October 5, 2010 Nu prea inteleg cerinta...adica a doua parte (cea de dupa exemplu) nu o inteleg deloc.Ignorand a doua parte, am scos asta .In primul rand, topicul a fost facut acum un an. Il al doilea rand, imi miroase a backtracking. Revin cu un edit.. Alt LE: Te referi cumva la numarul_total_de_bancnote_folosite / 99 ?...Cred ca la asta te refereai, acuma vad, dupa ce am scris sursa. Quote
Patrunjel Posted October 6, 2010 Report Posted October 6, 2010 ^ Nu inteleg ce vrei sa zici^^din ce am inteles eu, valorile bancnotelor se citesc.^^^Daca era o intrebare, e normal sa nu se mai astepte nimeni la un reply dupa un an.Insa asta e o problema, si atata timp cat nimeni nu a rezolvat-o, decat sa stea topicul fara raspuns, am zis sa postez.Nici nu prea stiu sa fac backtracking (adica stiu ideea, dar n-am implementat niciodata, cu intentie), insa daca era backtracking, ce? (Fara nicio nuanta de ironie, desi stiu ca intrebarea suna ironic) Quote
florin1000 Posted October 6, 2010 Report Posted October 6, 2010 algoritmul Greedy cu siguranta... dar am uitat cum era nu am mai facut de mult un program de genu , dar sigur e greedy, am inteles ca si in bancomate tot greedy se foloseste pentru determinarea intr-un mod optim de a da banii. Quote