Задание »

Trokšņojošie lācīši

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


Uzdevums

Katrā avīzes Postimees izdevumā tiek drukāta komiksa «Trokšņojošie lācīši» kāda daļa. Diemžēl dažreiz redakcijai gadās kļūdas un viena un tā pati bilde tiek drukāta vairākas reizes. Jūs, būdams «Lācīšu» piekritējs, vēlaties uzzināt, cik jaunu (tādu, kas nav izdoti agrāk) komiksu jūs esat dabūjis pagājušajā gadā. Par laimi, jums ir saglabājušās WWW-saites visa gada komiksiem. Visas saites ir sekojoša veida:

http://www.postimees.ee/koomiks/karudXXXX.jpg,

kur XXXX ir komiksa zīmēšanas (nevis izdošanas) datums. Tā kā ir zināms, ka komiksu autors Urmass Nemvaltss nekad nezīmē divas bildes vienā dienā, tad pietiek uzrakstīt programmu, kas izrēķina dažādo datumu skaitu šajā sarakstā.

Ievaddati

Teksta faila lacisi.in pirmajā rindā atrodas avīzes izdevumu skaits N (N<=366), bet katrā no nākamajām N rindām – URL vienam komiksam dotajā formātā.

Izvaddati

Teksta failā lacisi.out jāizvada viens skaitlis – atšķirīgo komiksu skaits.

Piemērs

lacisi.in lacisi.out
5

http://www.postimees.ee/koomiks/karud0101.jpg

http://www.postimees.ee/koomiks/karud0103.jpg

http://www.postimees.ee/koomiks/karud0104.jpg

http://www.postimees.ee/koomiks/karud0103.jpg

http://www.postimees.ee/koomiks/karud0106.jpg
4

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

Решение »

var s,code,k,i:integer;
t:string;
chis:array [1..400] of integer;
f:text;
begin
Assign(f,'lacisi.in');
Reset(f);
readln(f,s);
for i:=1 to s do
begin
readln(f,t);
t:=copy(t,38,4);
val(t,chis[i],code);
end;
Close(f);
code:=10000;
for k:=1 to s-1 do
for i:=k+1 to s do
begin
if chis[k]=chis[i] then begin inc(code); chis[k]:=code;  end;
end;
Assign(f,'lacisi.out');
Rewrite(f);
write(f,s-code+10000);
Close(f);
end.

Результат: 4/4

Задание »

Skaitlis

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


Uzdevums

Uzrakstiet programmu, kas ievadītiem naturāliem skaitļiem n un m atrod tādu mazāko iespējamo naturālo skaitli k, kuram vienlaicīgi izpildās sekojošas īpašības:
1) kn
2) k dalās ar m bez atlikuma.

Ievaddati

Teksta faila skaitlis.in pirmajā rindā dotas divu naturālu skaitļu n (0 < n <= 32000) un m (0 < m <= 500) vērtības, kas atdalītas ar tukšumsimbolu.

Izvaddati

Teksta faila skaitlis.out vienīgajā rindā jāizvada skaitļa k vērtība.

Piemērs

skaitlis.in skaitlis.out
38 17
51

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

Решение »

var n,z,m:integer;
f:text;
begin
Assign(f,'skaitlis.in');
Reset(f);
read(f,n,m);
Close(f);
z:=0;
while z=0 do
begin
n:=n+1;
if n mod m=0 then z:=1;
end;
Assign(f,'skaitlis.out');
Rewrite(f);
write(f,n);
Close(f);
end.

Результат: 10/10

Задание »

Saskaitīšana stabiņā

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


Uzdevums

Uz papīra lapas tika uzrakstīts naturāls skaitlis anan-1an-2…a2a1, kura visi cipari bija lielāki par 0.
Skaitlim bija ne vairāk kā 100 cipari.
Pēc tam zem šī skaitļa stabiņā tika uzrakstīti skaitļi an-1an-2…a2a1 , an-2…a2a1,…., a2a1, a1.
Beigās visi skaitļi tika saskaitīti. Piemērs, kad sākotnējais skaitlis ir 7231493, parādīts zīmējumā.

7231493
 231493
  31493
   1493
    493
     93
      3
-------
7496561

Uzrakstiet programmu, kas ievadītam sākotnējam skaitlim izvada aprēķināto summu.

Ievaddati

Teksta faila summa2.invienīgajā rindā dots sākumā uz lapas uzrakstītais skaitlis.

Izvaddati

Teksta faila summa2.out vienīgajā rindā jāizvada viens skaitlis – aprēķinātā summa.

Piemērs

summa2.in summa2.out
7231493
7496561

Atsauces

Uzdevums izmantots Latvijas 14.informātikas olimpiādes I (skolas) kārtā.
Autors: M.Opmanis


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

Решение »

var s,s1:string;
c:array [1..102] of string;
code,i,i2,l,p,k,d,d2,sko,s_li,sob:integer;
f:text;
begin
Assign(f,'summa2.in');
Reset(f);
read(f,s);
Close(f);
sko:=1;{ Po skoljko simvolov bratj }
l:=length(s) div sko;{ Skoljko chastej po sko shtuk }
p:=length(s);
k:=1;
sob:=0;
for i:=1 to l do begin
s1:=Copy(s,p,sko);
p:=p-sko;
val(s1,s_li,code);
d:=10;
d2:=1;
for i2:=1 to sko do begin
sob:=sob + ((s_li mod d div d2 * (length(s)-k+1))*d2);
d:=d*10;
d2:=d2*10;
inc(k);
end;
if sob/10>0 then begin
str(sob,s1);
c[i]:=Copy(s1,length(s1),sko);
sob:=sob div 10;
end
else sob:=0;
end;
if sob>0 then begin
inc(l);
str(sob,c[i+1]);
end
else c[i+1]:=s[1];
s1:='';
for i:=l downto 1 do begin
s1:=s1+c[i];
end;
Assign(f,'summa2.out');
Rewrite(f);
write(f,s1);
Close(f);
end.

Результат: 10/10

Задание »

Tuvākais skaitlis

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


Uzdevums

Ievadītam naturālam skaitlim n un ciparam c atrast tādu mazāko naturālo skaitli k, kuram vienlaicīgi izpildās sekojošas īpašības:
1)k>n
2)k pieraksts satur ciparu c.

Ievaddati

Teksta faila skaitl2.in pirmajā rindā ir dotas naturāla skaitļa n un cipara c vērtības, kas atdalītas ar tukšumsimbolu. Zināms, ka 0<n<32750.

Izvaddati

Teksta faila skaitl2.out pirmajā rindā izvadiet skaitļa k vērtību.

Piemērs

skaitl2.in skaitl2.out
11 7
17
19992 2
20000

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

Решение »

var n,c,n_length,j,z:integer;
f_in,f_out:text;
n_s,c_s:string;
begin
Assign(f_in,'skaitl2.in');
Reset(f_in);
read(f_in,n,c);
Close(f_in);
z:=0;
str(c,c_s);
while z=0 do
begin
n:=n+1;
str(n,n_s);
n_length:=length(n_s);
     for j:=1 to n_length do
     begin
     if n_s[j]=c_s then z:=1;
     end;
end;
Assign(f_out,'skaitl2.out');
Rewrite(f_out);
write(f_out,n);
Close(f_out);
end.

Результат: 10/10

Задание »

Mārciņas, šiliņi un pensi

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


Uzdevums

Kādā valstī līdz nesenam laikam apgrozībā esošās naudas vienības bija mārciņasšiliņi un pensi. Šīs naudas vienības savā starpā saistīja sekojošas sakarības: 1 mārciņa = 20 šiliņi, 1 šiliņš = 12 pensi. Tā kā šāda naudas sistēma bija grūti saskaņojama ar citu valstu naudas sistēmām, tad tika nolemts pāriet uz jaunu sistēmu, kurā būtu tikai mārciņas un pensi (sauksim tos par jaunajām mārciņām un jaunajiem pensiem), pie kam būtu spēkā sakarība 1 jaunā mārciņa = 100 jaunie pensi. Tika nolemts, ka pensam sava vērtība jāsaglabā (1 jaunais penss = 1 penss).
Uzrakstiet programmu, kas dotai naudas summai vecajā sistēmā aprēķina atbilstošu naudas summu jaunajā sistēmā.

Ievaddati

Teksta faila nauda.in pirmajā rindā dotas trīs nenegatīvu veselu skaitļu n1n2 un n3 vērtības, kas attiecīgi apzīmē kādas naudas summas mārciņu, šiliņu un pensu skaitu vecajā naudas skaitīšanas sistēmā. Zināms, ka dotās naudas daudzums nepārsniedza 100 «vecās» mārciņas. Starp katriem diviem blakus skaitļiem ir viens tukšumsimbols.

Izvaddati

Teksta faila nauda.out pirmajā rindā jāizvada ievadītā naudas summa jaunajā naudas skaitīšanas sistēmā kā divi veseli skaitļi – jauno mārciņu un jauno pensu skaits. Skaitļiem jābūt atdalītiem ar tukšumsimbolu. Summa jāpārveido tā, lai jauno pensu skaits būtu robežās no 0 līdz 99.

Piemērs

nauda.in nauda.out
3 100 1000
29 20
0 0 24000
240 0

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

Решение »

var d1,d2,d3:integer;
f_in,f_out:text;
name_in,name_out:string;
begin
name_in:='nauda.in';
Assign(f_in,name_in);
Reset(f_in);
read(f_in,d1);
read(f_in,d2);
read(f_in,d3);
Close(f_in);
d3:=(d1*20+d2)*12+d3;
d1:=d3 div 100;
d2:=d3 mod 100;
name_out:='nauda.out';
Assign(f_out,name_out);
Rewrite(f_out);
write(f_out,d1,' ',d2);
Close(f_out);
end.

Результат: 10/10

Задание »

Diena

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


Uzdevums

Visas 2001.gada dienas sanumurētas pēc kārtas no 1 (1.janvāris) līdz 365 (31.decembris). Uzrakstiet programmu, kas dotam 2001.gada dienas numuram nosaka, kāds šajā dienā ir datums.

Ievaddati

Teksta faila diena.in vienīgajā rindā dots naturāls skaitlis, kas nepārsniedz 365.

Izvaddati

Teksta faila diena.out vienīgajā rindā jāizvada divi skaitļi, kas atdalīti ar tukšumsimbolu – diena un mēneša kārtas numurs (janvārim atbilst 1 , februārim – 2, …, decembrim – 12).

Piemērs

diena.in diena.out
364
30 12

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

Решение »

program diena;
var nom:array[1..12] of integer;
a,i,cis,r:integer;
name_in,name_out:string;
f_in,f_out:text;
begin
name_in:='diena.in';
Assign(f_in,name_in);
Reset(f_in);
read(f_in,cis);
Close(f_in);
nom[1]:=31;
nom[2]:=28;
nom[3]:=31;
nom[4]:=30;
nom[5]:=31;
nom[6]:=30;
nom[7]:=31;
nom[8]:=31;
nom[9]:=30;
nom[10]:=31;
nom[11]:=30;
nom[12]:=31;
r:=0;
a:=0;
for i:=1 to 12 do
begin
a:=a+nom[i];
if a>=cis then
   begin
   r:=a-cis;
   if r=0 then r:=nom[i]
   else r:=nom[i]-r;
   break;
   end;
end;
name_out:='diena.out';
Assign(f_out,name_out);
Rewrite(f_out);
write(f_out,r);
write(f_out,' ');
write(f_out,i);
Close(f_out);
end.

Результат: 10/10

Задание »

Ciparu summa un reizinājums

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


Uzdevums

Ceks nopūtās un aizšķīra grāmatu «Matemātika 5. klasei». Viņam tik ļoti bija apnicis krāmēties ar garlaicīgo aritmētiku – saskaitīšanu, atņemšanu, reizināšanu un dalīšanu. Viņam vajadzēja ko interesantāku… Ceks domāja, domāja, un aizdomājās – nez, kas notiek, ja skaitlim n pieskaita klāt tā ciparu summu un tā ciparu reizinājumu. «Hmm. Interesanti, » noteica Ceks. Un ja nu to izdara pavisam n reizes? Tad būtu pavisam interesanti.

Ceks nolēma pamēģināt. Sāka viņš ar skaitli 3.
n0 = 3
n1 = 3 + 3 + 3 = 9 (skaitlis n0 + tā ciparu summa + tā ciparu reizinājums)
n2 = 9 + 9 + 9 = 27
n3 = 27 + 9 + 14 = 50

«Wow!» priecīgs iesaucās Ceks. Viņam iepatikās. Tagad viņš sāka ar skaitli n0 = 15. Pēc 15 iterācijām Ceks ieguva skaitli, kas pārsniedza 1000. Ceks saprata, ka tālu šādi netiks, un ka viņam nepieciešama programma, kas viņam palīdzētu.

Jūsu uzdevums ir uzrakstīt programmu, kas dotam skaitlim n0 atrod skaitli nn, kur ni = ni-1 + (ni-1 ciparu summa) + (ni-1 ciparu reizinājums).

Ievaddati

Faila sumreiz.in pirmā un vienīgā rindiņa satur skaitli n0 (0 < n < 100’000).

Izvaddati

Faila sumreiz.out jāizvada rezultējošais nn, kas iegūts veicot minēto darbību n reizes.

Piemērs

sumreiz.in sumreiz.out
3
50
sumreiz.in sumreiz.out
15
1086

Atsauces

Autors: Ģirts Folkmanis
2001. gada oktobris


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

Решение »

var n0,n,s,p,z,v,cod,n_z,i:longint;
n_s,name_in,name_out:string;
f_in,f_out:text;
begin
name_in:='sumreiz.in';
Assign(f_in,name_in);
Reset(f_in);
read(f_in,n0);
Close(f_in);
i:=0;
n:=n0;
while i<n0 do
begin
i:=i+1;
Str(n,n_s);
z:=Length(n_s);
s:=0;
p:=1;
for v:=1 to z do
begin
Val(n_s[v],n_z,cod);
s:=s+n_z;
p:=p*n_z;
end;
n:=n+s+p;
end;
name_out:='sumreiz.out';
Assign(f_out,name_out);
Rewrite(f_out);
write(f_out,n);
Close(f_out);
end.

Результат: 10/10

Задание »

Taisnstūris

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


Uzdevums

Vilibalds nolēma sagriezt taisnstūrveida rūtiņu lapu, kuras izmēri bija n×m rūtiņas, kvadrātos. Vispirms viņš no taisnstūra ar taisnu griezienu nogrieza lielāko iespējamo kvadrātu. Pēc tam kvadrātu nolika malā un atkārtoja iepriekšējo darbību ar atlikušo taisnstūri. Tā (visu laiku nogriežot lielāko iespējamo kvadrātu) Vilibalds turpināja griezt, līdz kamēr arī atlikumā ieguva kvadrātu.

Uzrakstiet programmu, kas nolasa no faila taisnst.in naturālu skaitļu n un m vērtības (n < 10000, m < 10000) un nosaka, cik kvadrātus Vilibalds ieguva, sagriežot taisnstūri iepriekš aprakstītajā veidā.

Ievaddati

Ievaddatu fails taisnst.in satur 2 skaitļus: n < 10000 un m < 10000, atdalītus ar tukšumsimbolu.

Izvaddati

Izvaddatu failā taisnst.out jāizvada iegūto kvadrātu skaits.

Piemērs

taisnst.in taisnst.out Piezīme
3 7
5
Taisnstūris tika sagriezts kvadrātos ar malu garumiem 3,3,1,1,1
taisnst.in taisnst.out
9999 9999
1

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

Решение »

var x,y,z:integer;
f:text;
begin
Assign(f,'taisnst.in');
Reset(f);
readln(f,x,y);
Close(f);
z:=0;
if x>y then begin
x:=x+y;
y:=x-y;
x:=x-y;
end;
if x=y then z:=0
else begin
while y>=1 do
begin
if x>y then begin
x:=x+y;
y:=x-y;
x:=x-y;
end;
y:=y-x;
z:=z+1;
end;
end;
Assign(f,'taisnst.out');
Rewrite(f);
write(f,z);
Close(f);
end.

Результат: 5/5

Нашел решения на задачи по pascal, которые я делал в 2008 году. Так что теперь выложу много всего. За код не ругайте, т.к. было давно и неправда. =)))

Задание »

Mazākais skaitlis

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


Uzdevums

Uzrakstiet programmu, kas ievadītam naturālam skaitlim n nosaka, kādu mazāko naturālo skaitli var izveidot no n cipariem, katru no tiem izmantojot vienu reizi!
Jaunizveidotā skaitļa pieraksts nedrīkst sākties ar 0.

Ievaddati

Teksta faila mazsk.in pirmajā rindā dota naturāla skaitļa n vērtība. Zināms, ka n ciparu skaits nepārsniedz 250.

Izvaddati

Teksta faila mazsk.out pirmajā rindā jāizvada mazākais skaitlis, ko iespējams iegūt no n cipariem.

Piemērs

mazsk.in mazsk.out
42727
22477

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

Решение »

program mazsk;
var a,b:string; arr:array [0..10] of byte; n,i,k:byte; f:text;

procedure minc();
var i:byte;
begin
 if arr[0]>0 then
  begin
   i:=0;
   repeat
    inc(i);
    if arr[i]>0 then
     begin
      str(i,a);
     end;
   until arr[i]>0;
   dec(arr[i]);
  end
 else a:='';
end;
{===================================}
begin
assign(f,'mazsk.in');
reset(f);
read(f,a);
close(f);
assign(f,'mazsk.out');
rewrite(f);
for i:=1 to length(a) do
 begin
  val(a[i],k,n);
  inc(arr[k]);
 end;

minc();

for i:=0 to 9 do
 for n:=1 to arr[i] do
  begin
   str(i,b);
   a:=a+b;
  end;

write(f,a);
close(f);
end.

Вроде задание было простым, но один нюанс с нулем давал аж целых 6/10.  Вот результат 10/10.

Задание »

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 Дня мучился над этой програмкой.