Тетратка#

Она што всушност се бараше како решение на оваа задача е да се напише програма која од стандарден влез (тастатура) ќе прочита три цели броја A, B и C (кои соодветствуваат на проблемот A#B=C), ќе одреди кој од аритметичките оператори (+, -, *, /) треба да се постави на местото на # за да равенката биде задоволена, и потоа на стандарден излез ќе ја отпечати равенката.

Решението се сведува на едноставно испробување на сите оператори и печатење на резултатот кога ќе го најдеме операторот кој ја задоволува равенката. Во текстот на задачата беше наведено дека секогаш ќе има точно едно решение, и дека B е делител на A, така што сите операции се изведуваат едноставно. Следи изворниот код на официјалното решение:

C++#

#include <iostream>
using namespace std;

int main()
{
    int a, b, c;    
    cin >> a >> b >> c;
    
    if (a+b == c) 
        cout << a << "+" << b << "=" << c << endl;

    if (a-b == c) 
        cout << a << "-" << b << "=" << c << endl;

    if (a*b == c) 
        cout << a << "*" << b << "=" << c << endl;

    if (a/b == c) 
        cout << a << "/" << b << "=" << c << endl;

    return 0;
}

Паскал#

program tetratka; (*Mario Talevski*)

var a,b,c:integer;


begin

   readln(a,b,c);
   
   if a+b=c then 
    begin
      writeln(a,'+',b,'=',c);
      readln;
    end;
    
   if a-b=c then
    begin
      writeln(a,'-',b,'=',c);
      readln;
    end;
    
   if a*b=c then
    begin
      writeln(a,'*',b,'=',c);
      readln
    end;
    
   if a/b=c then
    begin
      writeln(a,'/',b,'=',c);
      readln;
    end;

end.

Решенијата дадени погоре имаат сложеност O(1).

Желка#

Во оваа задача се бараше да напишеме програма која од стандарден влез ќе прочита три цели броеви H, U и D, и на стандарден излез ќе го испечати бројот на денови кои и се потребни на една желка да измине пат долг H метри. За еден ден желката може да измине U метри од патот, меѓутоа за време на ноќта таа одмара, лизгајќи се D метра надолу (наназад).

Бидејќи границите за H, U и D беа мали задачата може да се реши со циклус (со кој го симулираме искачувањето на желката - ден по ден), но и немора. Следи изворниот код на официјалното решение, кое не користи циклуси, туку еднаставно, со формула, го пресметува бараниот број на денови. Формулата директно следи од фактот што циклусот со кој се симулира качувањето на желката ќе се изврши точно ceil((h-d)/(u-d)) пати - ова се добива преку решавање на неравенката n*u-(n-1)*d≥h:

C++#

#include <iostream>
using namespace std;

int main()
{
    int h, u, d;
    cin >> h >> u >> d;
        
    
    int result = ((h-d-1) / (u-d)) + 1;
    //or result = ceil((h-d) / (u-d));
	
    cout << result << endl;
    return 0;
}

И ова решение има сложеност O(1). Доколку го симулиравме качувањето на желката ден по ден, решението ќе имаше линеарна сложеност.

Паскал#

program zelka;   (*Mario Talevski*)

var H,U,D,n,k:longint;


begin

   readln(H,U,D);
 
   while (n < H) do
 
     repeat
     n:=n+U;
     if (n<H) 
     then n:=n-D;
     k:=k+1;
     until (n >= H);
     
   writeln(k);

end.

Ова решение има линеарна сложеност или О(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_test_elektronski_2011.... 16.6 kB 1 20-Aug-2015 17:35 MOI
« This page (revision-12) was last changed on 20-Aug-2015 17:35 by MarioTalevski