Rezolvarea problemelor

Ok, a trecut ceva timp, haideți să vin și cu un răspuns în privința întrebărilor de algoritmică pe care le-am postat zilele trecute.

Portocalele

Aveam 12 portocale și din 3 cântăriri trebuie să aflu care este cea mai ușoară.

În primul rând trebuie să împart portocalele în 3 grupe formate din 4 portocale fiecare.

Grup 1: 1 2 3 4
Grup 2: 5 6 7 8
Grup 3: 9 10 11 12

Cântăresc primele două grupe, notez înclinarea balanței  și o să am două cazuri:

1. Grupele sunt egale, acesta este cazul favorabil, urmând să iau grupul 3 și să cântăresc 9 10 și 11 12. Notez care a atârnat mai grea sau mai ușor și fac o rocadă, cântăresc 9 11 și 10 12. Dacă balanța a atârnat în jos la 11 12 și după a atârnat în jos la 9 11, știu sigur că 11 e portocala diferită. Aceeași deducție și pentru restul cazurilor.

2. Grupele sunt inegale, știu sigur că pot să renunț la grupa 3 astfel că rămân cu portocalele 1 2 3 4 și 5 6 7 8. De dragul exemplului hai să zicem că 1 2 3 4 este cea care a atârnat mai greu.

Împart portocalele în următoarea sub grupă: 1 2 3 și 4 5 6 și le cântăresc:

1. Grupele sunt egale este clar că portocala 7 sau 8 este diferită și o pot afla prin a treia cântărire între o portocală de test și 7. Dacă acestea sunt egale 8 era portocala mea diferită, dacă sunt inegale atunci 7 e portocala diferită și pot să aflu dacă este și mai grea sau mai ușoară.

2. Grupele sunt inegale:

A. Dacă am balanța înclinată în aceeași direcția ca la prima cântărire știu sigur că în grupul 1 2 3 este portocala diferită și urmează cântărirea cu numărul 3: între 1 și 2. Dacă acestea sunt egale 3 este portocala mea și dacă 1 sau 2 înclină în jos aceea este aleasa.

B. Dacă am balanța înclinată diferit față de prima cântărire știu sigur că portocala diferită este cea care a ajuns în alt grup, adică portocala 4. Nemaiavând nevoie de o a 3-a cântărire.

 

Pălăriile lui Molly, Polly și Curly

Întrebarea aia în care am 3 pălării negre, 2 albe, Molly vede ce pălărie are Polly și Curly, Polly vede ce pălărie are Curly și Curly nu vede nimic. Întrebarea completă dând click aici.

Răspunsul:

Dacă Polly și Curly ar fi avut pălării albe, Molly ar fi știut răspunsul. Anume că are pălăria neagră, dar cum nu știut răspunsul există două posibilități: Polly și Curly fie au pălării negre și fie o pălărie albă și una neagră.

Curly dacă ar fi văzut în fața lui pălăria albă și știind că Molly nu a dat un răspuns concret putea să deducă că el are în cap pălăria neagră, dar cum nici acesta nu a știut răspunsul rezultă că Dl Curly avea o pălărie neagră de toată frumusețea 🙂

 

Cutiile poștale

Problema în care Ion era pus pe șotii, avea multă energie și a făcut 100 drumuri prin cartier să închidă și să deschidă cutiile poștale. Problema o găsiți aici.

Răspunsul:

Am aplicat un for și o metodă recursivă:

class cutia
{
int open;
int poz;
}

cutia[] cutie=new cutia[100];

void main()
{
RunIonRon(0);
foreach (cutia c in cutia)
{
if (c.open==1) open++ else close++;
}
Console.WriteLine(“Am {0} cutii deschise și {1} cutii închise”, open, close);
}
//Realizez că puteam afla nr de cutii închise scăzând din 100 nr cutii deschise, dar nu mi-am dat seama în momentul rezolvării.

RunIonRun(int j)
{
if (j<100)
{
for (int i=0+j;i<n-1;i+1+j)
{
if (cutia[i].open==1) cutia[i].open=0 else cutia[i].open=1;
}
RunIonRun(j+1);
}
}




Leave a Comment

Blog

Recent posts