Задание »

Desu protokols

ID: desas
Grūtība: 1/5
Laika limits: 1


Uzdevums

Luņķu pagastā risinās «DESU» turnīrs. Spēles notiek uz rūtiņveida (3*3) lauka (rūtiņas sanumurētas no 1 līdz 9):

1 2 3
4 5 6
7 8 9

Spēlētāji pēc kārtas izliek «krustiņus» (pirmais) un «nullītes» (otrais), un spēles protokolā pieraksta atbilstošās rūtiņas numuru.
Uzvarējis ir tas spēlētājs, kurš pirmais jebkurā vertikālā, horizontālā vai diagonālā līnijā ielicis trīs savus kauliņus. Ja nevienam tas nav izdevies un visas rūtiņas aizpildītas, tad spēle beigusies neizšķirti.
Spēles protokolu uzskatīsim par nekorektu, ja tajā parādās sveši simboli; tajā simboli atkārtojas; tas ir par īsu (neviens no spēlētājiem nav uzvarējis un nav aizpildītas visas 9 rūtiņas); tas ir par garu.
Uzrakstīt programmu, kas pēc ievadīta spēles protokola nosaka cik tas ir korekts un kā beigusies šī spēle.

Ievaddati

Teksta faila desas.in vienīgajā rindā dots spēles protokols – ciparu virkne, kuras garums nepārsniedz 20 simbolus.

Izvaddati

Teksta faila desas.out vienīgajā rindā jāizvada viens vārds atkarībā no tā cik korekts ir ievadītais protokols un kāds bijis spēles rezultāts:

  • ja uzvar pirmais spēlētājs – PIRMAIS
  • ja uzvar otrais spēlētājs – OTRAIS
  • ja neizšķirts – NEVIENS
  • ja nekorekts protokols – NEKOREKTS

Piemērs

desas.in desas.out
1234567
PIRMAIS
desas.in desas.out
1232
NEKOREKTS

Atsauces

Uzdevums izmantots Latvijas 9.informātikas olimpiādes II (rajona) kārtā.
Autori: A.Kalējs, M.Opmanis


© 2001-2002 olimps! http://www.lio.lv/olimps/

Решение »

var a:string; arr:array [1..10] of byte; res,i,n,code:byte; kr:longint; f:text; er:boolean;
label err;

function check():byte;
var i,s:byte;
 begin
  check:=0;
  for i:=1 to 2 do
   begin
    s:=i*3;
    if ((arr[1]+arr[2]+arr[3])=s) or
       ((arr[4]+arr[5]+arr[6])=s) or
       ((arr[7]+arr[8]+arr[9])=s) or
       ((arr[1]+arr[4]+arr[7])=s) or
       ((arr[2]+arr[5]+arr[8])=s) or
       ((arr[3]+arr[6]+arr[9])=s) or
       ((arr[1]+arr[5]+arr[9])=s) or
       ((arr[3]+arr[5]+arr[7])=s) then check:=i;
   end;
 end;
{============================================}
begin
assign(f,'desas.in');
reset(f);
read(f,a);
close(f);
assign(f,'desas.out');
rewrite(f);
res:=3;
er:=false;

for i:=1 to 9 do
 begin
  arr[i]:=10;
 end;

val(a,kr,code);
if ((length(a)>9) or (length(a)<5)) or (code<>0) then goto err
else
 begin
  for i:=1 to length(a) do
   begin
    val(a[i],n,code);
     if (i mod 2)<>0 then kr:=1
     else kr:=2;

     if (arr[n]=10) then arr[n]:=kr
     else
      begin
       res:=3;
       goto err;
      end;

     if i>4 then
      begin
       res:=check();
       if res<>0 then break;
      end;
   end;
 end;

if ((res=0) and (length(a)<9)) or (((res=1) or (res=2)) and (length(a)<>i)) then begin er:=true; goto err; end;
case res of
  0: write(f,'NEVIENS');
  1: write(f,'PIRMAIS');
  2: write(f,'OTRAIS');
 end;

err: if (res=3) or (er=true) then write(f,'NEKOREKTS');

close(f);
end.

А вот результат который у меня вышел 10/10. 2 Дня мучился над этой програмкой.

1 комментарий на «Desu protokols (*)»

  1. sincool:

    Ты 2 дня а мы уже неделю сидим :(

Добавить комментарий