Găsiți cel puțin două numere întregi fără operații de comparație

O companie foarte respectată îi solicită celor care doresc să lucreze în cadrul acesteia să rezolve o serie de sarcini înainte de interviu. Iată unul dintre ei.

Codul suplimentar este o metodă folosită în computerele moderne pentru codarea întregilor, unde un număr non-negativ X este reprezentat "ca atare" și un număr negativ X ca







(| X | -1). Astfel, numărul maxim nonnegativ, care poate fi reprezentat de 32 de biți de cod suplimentar, este 2 31 -1. Pentru orice număr nonnegativ din codul adițional, cel mai mare bit este zero, iar pentru orice număr negativ, unul.

Găsiți metoda de a găsi minimum două numere pozitive pe 32 de biți reprezentate în codul suplimentar care nu utilizează operații de comparare și tranziții condiționate.







Interesant în mod natural este metoda care utilizează numărul minim de operații și nu utilizează tabele auxiliare. Puteți utiliza următoarele operații pe 32 de biți:

echivalent
operație limbajul C

adaugă în cod suplimentar

Extragere în cod suplimentar

înmulțire în cod suplimentar

divizare semnate în cod suplimentar

divizare nesemnată în codul suplimentar

operații logice cu inversarea celui de-al doilea argument

aritmetică trecerea spre dreapta (cu răspândirea de semn de descărcare de gestiune)

schimbarea logică a dreptului (cu propagarea zero)

Există o metodă cunoscută de a găsi un minim cu ajutorul a 4 operațiuni, dar, desigur, puteți da un răspuns în cazul în care ați primit mai multe operațiuni.

O problemă interesantă. Mai jos în casetă este soluția sa de 5 tranzacții în C (4 operațiuni nu au stăpânit). Deoarece nu este interesant să rezolvăm o problemă, văzând în fața deciziei gata, această decizie este ascunsă. Ie textul este înregistrat cu culoarea de fundal. Dacă doriți să vedeți textul, selectați-l cu mouse-ul.







Trimiteți-le prietenilor: