Календар#

Како решение на оваа задача се бараше програма која од стандарден влез (тастатура) ќе прочита два цели броеви 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 архива тука(info).
Текстот и решенијата дадени погоре можете слободно да ги коментирате на форумот.

Add new attachment

Only authorized users are allowed to upload new attachments.

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
« This page (revision-5) was last changed on 20-Aug-2015 17:35 by MOI