Expresie CAMPION.EDU.RO

Ca si orice alta activitate, programarea depinde mult de factorul uman. Hai sa vedem ce ne face pe noi sa butonam.

Expresie CAMPION.EDU.RO

Postby eric56 » 11 Jan 2012, 18:46

Salutare!!!

Dacă vă simțiți în formă, puteți să îmi dați niște indicații la problema expresie de pe campion.edu.ro ?

Nu trebuie să determinați voi ce trebuie să fac in problemă.

Se citește un număr natural n și n numere.
Trebuie să pun între cele n numere 2 operații de înmulțire, și logic N-3 operații de adunare astfel încât să se afișeze rezultatul maxim.

ex:

5
4 7 1 5 3

(se afișeaza rezultatul)

44

Explicație (nu se afișează și explicația)

4*7+1+5*3 = 44



Mă gândesc să aflu cele mai mari 2 perechi din șir , adică , în cazul concret,

4,7 și 5,3 și să îl modific ca și înmultire


Aveți idei? Orice idee este binevenită ! :)
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Expresie CAMPION.EDU.RO

Postby eni4ever » 11 Jan 2012, 21:07

Dacă nu ai voie să rearanjezi elementele citite, atunci ai putea folosi un vector auxiliar de produse. În respectivul vector vei pune rezultatul înmulțirii a 2 elemente vecine din vectorul tău inițial.
De exemplu, pentru datele tale, vom avea noul vector v cu următoarele valori :
  1. v[0] = 4 * 7 = 28;
  2. v[1] = 7 * 1 = 7;
  3. v[2] = 1 * 5 = 5;
  4. v[3] = 5 * 3 = 15;

Din vectorul respectiv, alegi cele mai mari 2 elemente și interpretezi semnele ce trebuie să le pui în felul urmățor : fiind un vector de produse de 2 elemente vecine, cele mai mari 2 valori vor fi înlocuite cu * (produs), iar restul vor fi înlocuite cu + (sumă).
În felul acesta, avem următoarele semne :
  1. v[0] = 28 (maxim 1) => *
  2. v[1] = 7 => +
  3. v[2] = 5 => +
  4. v[3] = 15 (maxim 2) => *

Iei noile semne, le intercalezi cu vectorul tău inițial, rezolvi ecuația și-ți ai rezultatul.

Desigur, algoritmul poate fi puternic optimizat. Se poate aborda o metodă greedy în care să se elimine cu totul vectorul v și să se afle rezultatul final încă din bucla de citire a celor n elemente, dar asta presupune o stăpânire desăvârșită a logicii și o înțelegere elementară a conceptului de bază (cel enunțat mai sus). Ai putea chiar tu să încerci (și să nu te dai bătut decât atunci când reușești) să simplifici algoritmul propus, acum, că știi că se poate. Câștigul, vei vedea, va fi mai valoros decât niște puncte obținute într-un concurs.

Spor
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Expresie CAMPION.EDU.RO

Postby Mihai » 11 Jan 2012, 22:27

@Victor:
Soluția ta este parțial corectă - vezi mai jos un contraexemplu pe care algoritmul propus se comportă ciudat:


Editare ulterioară: se pare că nu am primit enunțul problemei corect - și cele n numere ar fi trebuit să fie naturale. Totuși, îmi mențin afirmația legată de corectitudinea soluției:

0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: Expresie CAMPION.EDU.RO

Postby eni4ever » 11 Jan 2012, 23:16

Pentru

Răspunsul scos ar fi
Din limitări, nu văd alt rezultat mai bun. Operațiile ar reieși din :
  1. v[0] = 4 * 4 = 16 (maxim 1) => * între primul și al doilea element
  2. v[1] = 4 * 3 = 12 => + între al doilea și al treilea element
  3. v[2] = 3 * 4 = 12 => + între al treilea și al patrulea element
  4. v[3] = 4 * 4 = 16 (maxim 2) => * între al patrulea și al cincilea element

Înțeleg ceva greșit ? Repet : consider că soluția este corectă numai în cazul în care ordinea elementelor citite trebuie să se păstreze conform exemplului lui eric. Dacă nu s-ar fi respectat ordinea, atunci 5*7+1+4*3 = 48 (> 44) ar fi fost o mai bună alegere.

L.E: Sub aceleași considerente, exemplul :

ar scoate:
  1. 0 * (-100) + 1 + 0 * (-100) = 1

ceea ce, din câte pot eu să urmăresc, ar fi corect, sau ?
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Expresie CAMPION.EDU.RO

Postby cata45 » 11 Jan 2012, 23:16


Raspunsul corect este 56.

0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Expresie CAMPION.EDU.RO

Postby eni4ever » 11 Jan 2012, 23:19

^ Semnele se pot insera oriunde între elemente ? Nu trebuie să fie intercalate ? În acest caz, corect : am greșit, rezolvarea mea nu este corectă!
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Expresie CAMPION.EDU.RO

Postby cata45 » 11 Jan 2012, 23:20

Nu...Am rezolvat si eu problema asta cand eram in clasa a IX-a si pierdeam puncte din cauza ca nu luam in calcul ca cele doua semne de inmultire pot fi unul langa altul.
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Expresie CAMPION.EDU.RO

Postby eric56 » 13 Jan 2012, 17:05

Wow, am terminat-o :)
Mulțumesc!
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0


Return to Discutii despre programare

Who is online

Users browsing this forum: No registered users and 0 guests

cron