Календар#
Како решение на оваа задача се бараше програма која од стандарден влез (тастатура) ќе прочита два цели броеви M и G, кои означуваат одреден месец и година - соодветно, и на стандарден излез (екран) ќе отпечати колку денови имал/има/ќе има месецот M во годината G.
Решението се сведува на чување на бројот на денови кои ги има секој месец и пресметување дали една година е престапна или не (со if наредба). Следи изворниот код на официјалното решение:
C++#
#include <iostream> using namespace std; int main() { int days[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int m, y; cin >> m >> y; int answer = days[m-1]; if (m==2) //february if ((y%400==0) || ((y%4==0)&&(y%100!=0))) answer++; cout << answer << endl; return 0; }
Паскал#
program kalendar; (** Марио Величковски **) var m,g,d:integer; begin readln(m,g); case m of 1:d:=31; //januari 2:if (g mod 400=0) or ((g mod 4=0) and (g mod 100<>0)) then d:=29 else d:=28; //fevruari 3:d:=31; //mart 4:d:=30; //april 5:d:=31; //maj 6:d:=30; //juni 7:d:=31; //juli 8:d:=31; //avgust 9:d:=30; //septemvri 10:d:=31; //oktomvri 11:d:=30; //noemvri 12:d:=31; //dekemvri end; writeln(d); readln; end.
Решението дадено погоре има константна сложеност O(1).
Шах#
Во оваа задача се бараше да напишеме програма која за дадена позиција на еден коњ, и позициите на N противнички фигури, ќе пресмета и отпечати колку од N-те противнички фигури се нападнати од коњот.
Задачата се решава така што, откога ќе ја прочитаме позицијата на која се наоѓа коњот, за секоја од N-те противнички фигури проверуваме, посебно, дали е таа на позиција на која што може да дојде коњот. Проверката можеме да ја направиме на повеќе начини: чувајќи ги можните потези на коњот во низа (види решение), проверка дали важи условот (abs(r1-r2)=1 AND abs(c1-c2)=2) OR (abs(r1-r2)=2 AND abs(c1-c2)=1), или па дали важи (r1-r2)2+(c1-c2)2=5. Следи изворниот код на официјалното решение:
C++#
#include <iostream> #include <string> using namespace std; int main() { int row, col; string scol; cin >> scol >> row; col = scol[0] - 'a' + 1; int n; cin >> n; int answer = 0; int mx[] = {-2,-1,1,2, 2, 1,-1,-2}; int my[] = {1 ,2, 2,1,-1,-2,-2,-1}; for (int i=0; i<n; i++) { int cr, cc; string scc; cin >> scc >> cr; cc = scc[0] - 'a' + 1; for (int j=0; j<8; j++) if (row+my[j] == cr) if (col+mx[j] == cc) answer++; } cout << answer << endl; return 0; }
Ова решение има линеарна сложеност O(N).
Тест случаи#
Тест случаите можете да ги симнете како .zip архива тука
Текстот и решенијата дадени погоре можете слободно да ги коментирате на форумот.
Add new attachment
List of attachments
Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
---|---|---|---|---|---|---|
zip |
testovi_cetvrti_elektronski_20... | 17.6 kB | 1 | 20-Aug-2015 17:35 | MOI |