Drage takmičarke i dragi takmičari,
Kako ste skoro svi pokuavali da reite 1. zadatak Mala matrica, ba korićenjem tipa podataka za matricu dimenzija 2x3, a kako je bio veliki broj grana (pa i begin-a i end-a u granama) i viestrukih else grana, na osnovu svih vaih verzija, napravio sam i objedinio kod, a zatim ga samo malo preuredio kako bi bio pregledniji.
Takođe, u ovom zadatku akcenat nije na optimizaciji vremena, te sam izbacio status, a sređivanje druge kolone vratio na početak koda. Tačnije status nisam potpuno izbacio, već sam umesto promenljive R za status koristio ukupan broj nula (N4, kao i N1 i N3) i upit da li je trenutni zbir prve levo i poslednje desno (S1 i S3) različit.
Obratite panju na ukupan broj nula (N4) i nekoliko stanja koji se nadovezuju redom počev od stanja kada je ukupan broj nula najmanje 4, pa zatim 3, 2, 1 i 0. U svakoj od ovih kombinacija, auriraju se podaci o ukupnom broju nula. Posebnu panju obratite kada je broj nula 3, zamenjuje se jedna (jedina nula u odgovarajućoj koloni) a broj nula se aurira na 2. Tok algorirma je takav, da nakon reavanja situacije kada je broj nula 3 se svodi na reavanje situacije kada je broj nula 2, odnosno nastavlja ("propada") аlgoritamski tok na sledeću kombinaciju (redom).
Malo sam izmenio glavni scenario algoritma, kako bi bio u sledećem grubom redosledu:
- Učitavanje matrice
- Tipove podataka za elemente matrice i zbirove kolona na Int64.
- Postavljanje svih nula u drugoj koloni na jedinice.
- Prebrojavanje nula u prvoj i trećoj koloni i izraćunavanje zbira elemenata prve i treće kolone.
- Ako je ukupan broj nula 4 ili veći, postavljamo sve elemente na 1, a broj nula na nula.
- Ako je ukupan broj nula 3, postavljamo jedinu nulu u koloni koja ima samo jednu nulu na 1, a ukupan broj nula na 2, time stanje svodimo na deo zadatka sa 2 nule.
- Ako je ukupan broj nula 2, prvo proveravamo da li su obe u jednoj od kolona i ukoliko jesu prepisujemo iz supronte kolone, u suprotnom odrđujemo veći element pa u toj koloni postavljamo 1, a zatim ukupan broj nula na 1.
- Nakon toga računamo apsolutnu razliku (SR) zbirova prve i treće kolone.
- Ako je ukupan broj nula 1 i apsolutna razlika veće od nule, nulu postavljamo na vrednost apsolutne razlike.
- Ponovo računamo zbir prve i treće kolone i proveremo da li se razlikuju ili ne, jer u zavisnosti od toga tampamo vrednost -1 ili vrednosti elememenata matrice.
Kada budete imali vremena obavezno detaljno proučite i proverite ovaj programski kod (u prilogu) jer je najpribliniji zajedničkom preseku svih reenja takmičara iz nae kole.
Ova verzija programskog koda zadatka 01 Mala matrica, prolazi sve pripremljene test primere, odnosno osvojila bi maksimalan broj bodova (100), to moete i sami da proverite direktno (onlajn) do 28.01 na:
Pozdrav,
Dragan Ilić
Нема коментара:
Постави коментар