Задание »

Faktoriāla nulles

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


Uzdevums

Naturāla skaitļa n faktoriālu (apzīmē «n!») aprēķina, sareizinot visus naturālos skaitļus no 1 līdz n :
n! = 1*2*…*(n-1)*n .

Uzrakstiet programmu, kas dotai n vērtībai nosaka, ar cik nullēm beidzas n faktoriāla pieraksts!

Ievaddati

Teksta faila fanulles.in vienīgajā rindā dots naturāls skaitlis – n vērtība (n<=109).

Izvaddati

Teksta faila fanulles.out vienīgajā rindā jāizvada viens vesels skaitlis nuļlu skaits n! pieraksta beigās.

Piemērs

fanulles.in fanulles.out
3
0
fanulles.in fanulles.out
10
2
fanulles.in fanulles.out
54321
13576

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

Решение »

program fanulles;
var f:text; a,b,d:longint;
begin
assign(f,'fanulles.in');
reset(f);
readln(f,a);
close(f);

if a<5 then b:=0
else begin
 d:=5;
 while a>=d do
  begin
  b:=b+(a div d);
  d:=d*5;
  end;
end;

assign(f,'fanulles.out');
rewrite(f);
writeln(f,b);
close(f);
end.

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

Вот поперло, 2 задачи за такой короткий срок. Урааааааааааааааа!!! С Рождествоом!!!

Задание »

Pentamino

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


Uzdevums

Pentamino figūras veido no pieciem kvadrātiem, novietojot tos tā, ka katram kvadrātam ir kopīga mala ar kādu citu.
Šoreiz izmantosim tikai trīs veida pentamino figūras:

Sauksim tās par A, B un C veida figūrām. Katra veida figūrai viens kvadrāts ir iekrāsots citādi. Sauksim to par attiecīgā veida figūras galveno kvadrātu.

Kvadrātveida rūtiņu laukumā, kura izmēri ir 8*8, izvietosim ne vairāk kā 10 iepriekšminētā veida figūras tā, lai katras figūras kvadrāti sakristu ar laukuma rūtiņām, un katra no figūrām pilnībā ietilptu laukumā. Figūras drīkst pārklāties. Figūras nedrīkst būt pagrieztas vai apgrieztas. Laukuma kolonnas ir sanumurētas no kreisās puses uz labo ar naturāliem skaitļiem no 1 līdz 8 pēc kārtas. Analoģiski no lejas uz augšu ir sanumurētas arī rindas.

Jūsu uzdevums ir uzrakstīt programmu, kas nosaka, cik no 64 laukuma rūtiņām noklāj vismaz viena pentamino figūra.

Ievaddati

Teksta faila pentam1.in pirmā rinda satur naturālu skaitli N, 1 <= N <= 10, kas apzīmē uz laukuma izvietoto pentamino figūru skaitu. Katrā no nākošajām N faila rindām tiek dotas kādas figūras apraksts formā

burts kolonnas_numurs rindas_numurs

, kur burts norāda attiecīgās figūras veidu (A,B vai C), bet kolonnas un rindas numurs norāda laukuma rūtiņu, kuru noklāj šīs figūras galvenais kvadrāts. Starp burtu un kolonnas numuru, kā arī starp kolonnas numuru un rindas numuru ir viens tukšumsimbols.

Izvaddati

Teksta faila pentam1.out vienīgajā rindā jāizvada viens naturāls skaitlis – laukuma rūtiņu skaits, ko noklāj dotās pentamino figūras.

Piemērs

pentam1.in pentam1.out
5
A 2 5
C 5 7
B 7 6
C 8 1
A 4 3
22

Atsauces

Uzdevums izmantots ACSL sacensībās 1996./97. gadā.


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

Решение »

program pentam1;
var f:text; a,b,i,n:integer; t:char; arr:array [1..9,1..9] of byte;
procedure add();
 begin
  arr[a,b]:=1;
  case t of
   'A': begin arr[a,b-1]:=1; arr[a,b-2]:=1; arr[a+1,b-2]:=1; arr[a+2,b-2]:=1; end;
   'B': begin arr[a+1,b]:=1; arr[a+1,b-1]:=1; arr[a,b-1]:=1; arr[a,b-2]:=1; end;
   'C': begin arr[a,b+1]:=1; arr[a-1,b]:=1; arr[a-2,b]:=1; arr[a-3,b]:=1; end;
  end;
 end;
{========================}
begin
assign(f,'pentam1.in');
reset(f);
readln(f,n);
for i:=1 to n do
 begin
  readln(f,t,a,b);
   add();
 end;
close(f);

a:=0;
for i:=1 to 8 do
 for n:=1 to 8 do
  a:=a+arr[i,n];

assign(f,'pentam1.out');
rewrite(f);
writeln(f,a);
close(f);
end.

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

Вот моя свеже испеченная программа, написал с первого раза и получил 10/10. Редко такое бывает. =)

Задание »

Ciparu virkne

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


Uzdevums

Ciparu virknē a1,a2,a3,…. katrs loceklis sākot no trešā ir vienāds ar iepriekšējo divu virknes locekļu summas pēdējo ciparu.
Uzrakstiet programmu, kas dotiem a1,a2 un n atrod an. n<32768.

Ievaddati

Teksta faila cipvirk.in vienīgajā rindā dotas trīs veselu skaitļu a1,a2 un n vērtības.
Zināms, ka 0<=a1<=9; 0<=a2<=9; 0<n<32768.
Starp katriem diviem blakus skaitļiem ir viens tukšumsimbols.

Izvaddati

Teksta faila cipvirk.out vienīgajā rindā jāizvada vesels skaitlis – an vērtība.

Piemērs

cipvirk.in cipvirk.out
1 7 12
8

Atsauces

Uzdevums izmantots Latvijas 15.informātikas olimpiādes II (rajona) kārtā.
Autors: M.Opmanis


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

Решение »

var c3,c1,c2,i,n:integer;
f:text;
begin
Assign(f,'cipvirk.in');
Reset(f);
read(f,c1,c2,n);
Close(f);
for i:=1 to n-1  do begin
c3:=c1 mod 10 + c2 mod 10;
c1:=c2;
c2:=c3;
end;
Assign(f,'cipvirk.out');
Rewrite(f);
write(f,c1 mod 10);
Close(f);
end.

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

Задание »

Teksts latviski

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


Uzdevums

Sensenos laikos, kad vēl nebija ne Microsoft, ne Word, ne Excel, latvieši burtu ar diakritiskajām zīmēm pierakstīšanai datorā izmantoja sekojošus principus:

  • patskaņus ā,ē,ī,ū apzīmēja attiecīgo īso patskani dubultojot (aa,ee,ii,uu),
  • līdzskaņus ģ,ļ,ķ,ņ apzīmēja aiz attiecīgā nemīkstinātā līdzskaņa liekot burtu ‘j’ (gj,lj,kj,nj),
  • līdzskaņus (č,š,ž) apzīmēja aiz attiecīgā līdzskaņa liekot burtu ‘h’ (ch,sh,zh).

Visi citi burti datorā tika pierakstīti tāpat kā jebkurā tekstā.
Piemēram, teksts «pļavā nekad neēd svešas puķītes» datorā tika pierakstīts kā «pljavaa nekad neeed sveshas pukjiites».

Tiesa, atpakaļ atkodēt varēja ne visus tekstus.
Piemēram, nepārzinot latviešu valodu, nevar noteikt, ka vārdam «neeed» atbilstošais vārds nav «nēed».
Bet par šādiem īpašiem gadījumiem Jums nav jāuztraucas.

Uzrakstiet programmu, kas dotam datorā pierakstītajam tekstam (pēc iepriekšaprakstītajiem noteikumiem) nosaka, kāds mazākais burtu skaits varēja būt oriģinālajā tekstā!

Ievaddati

Teksta faila latv.in vienīgajā rindā dota simbolu virkne, kas sastāv no latviešu valodas mazajiem burtiem bez diakritiskajām zīmēm ar tukšumsimboliem kā vārdu atdalītājiem.
Virknes kopgarums nepārsniedz 250 simbolus.
Zināms arī, ka ievadītajā virknē ir vismaz viens burts un starp blakus esošiem vārdiem ir viens vai vairāki tukšumsimboli.

Izvaddati

Teksta faila latv.out vienīgajā rindā jāizvada naturāls skaitlis – mazākais iespējamais burtu skaits oriģinālajā tekstā.

Piemērs

latv.in latv.out
pljavaa nekad neeed sveshas pukjiites
27

Atsauces

Uzdevums izmantots Latvijas 15.informātikas olimpiādes II (rajona) kārtā.
Autors: M.Opmanis


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

Решение »

var r:string;
l,i:integer;
f:text;
begin
Assign(f,'latv.in');
Reset(f);
read(f,r);
Close(f);

l:=0;
i:=1;
while i<=length(r) do begin
case r[i] of
  'a': begin if r[i+1]='a' then begin i:=i+2; inc(l); end else inc(i);  end;
  'e': begin if r[i+1]='e' then begin i:=i+2; inc(l); end else inc(i);  end;
  'i': begin if r[i+1]='i' then begin i:=i+2; inc(l); end else inc(i);  end;
  'u': begin if r[i+1]='u' then begin i:=i+2; inc(l); end else inc(i);  end;
  'g': begin if r[i+1]='j' then begin i:=i+2; inc(l); end else inc(i);  end;
  'l': begin if r[i+1]='j' then begin i:=i+2; inc(l); end else inc(i);  end;
  'k': begin if r[i+1]='j' then begin i:=i+2; inc(l); end else inc(i);  end;
  'n': begin if r[i+1]='j' then begin i:=i+2; inc(l); end else inc(i);  end;
  'c': begin if r[i+1]='h' then begin i:=i+2; inc(l); end else inc(i);  end;
  's': begin if r[i+1]='h' then begin i:=i+2; inc(l); end else inc(i);  end;
  'z': begin if r[i+1]='h' then begin i:=i+2; inc(l); end else inc(i);  end;
  ' ': begin inc(l); inc(i); end;
  else inc(i);
end;
end;

Assign(f,'latv.out');
Rewrite(f);
write(f,length(r)-l);
Close(f);
end.

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

Задание »

CIK?

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


Uzdevums

Naturāliem skaitļiem x un decimāliem cipariem y var definēt funkciju

CIK(x,y) ::= mazākais naturālais skaitlis kāds jāpieskaita pie x, lai iegūtu skaitli, kura decimālais pieraksts satur ciparu y.

Tā, piemēram, CIK(8,3) = 5 (jo 8+5=13), bet CIK(16,1) = 1 (jo 16+1=17).
Uzrakstiet programmu, kas ievadītiem x un y atrod CIK(x,y)!

Ievaddati

Teksta faila cik.in pirmajā rindā dots naturāls skaitlis x un cipars y , kas atdalīti ar tukšumsimbolu.
Zināms, ka 0<x<109.

Izvaddati

Teksta faila cik.out vienīgajā rindā jāizvada funkcijas CIK(x,y) vērtība.

Piemērs

cik.in cik.out
93 1
7

Atsauces

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


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

Решение »

var x,cis:longint;
y,ch,code,i:integer;
x_s:string;
b:boolean;
f:text;
begin
Assign(f,'cik.in');
Reset(f);
read(f,x,y);
Close(f);
cis:=x;
b:=false;
while b=false do begin
inc(cis);
str(cis,x_s);
for i:=1 to length(x_s) do begin
val(x_s[i],ch,code);
if ch=y then begin b:=true; break; end;
end;
end;
Assign(f,'cik.out');
Rewrite(f);
write(f,cis-x);
Close(f);
end.

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

Задание »

Supersumma

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


Uzdevums

Jebkuram naturālam skaitlim n var aprēķināt ciparu summu.
Arī šai iegūtajai summai var aprēķināt ciparu summu.
Tā turpinot, kādreiz noteikti iegūs vienciparu skaitli.
Sauksim to par n supersummu.
Uzrakstiet programmu, kas dotiem diviem naturāliem skaitļiem k un m atrod reizinājuma k*m supersummu!

Ievaddati

Teksta faila super.in satur divas rindas.
Pirmajā rindā dota skaitļa k, bet otrajā – skaitļa m vērtība.
Zināms, ka neviena skaitļa ciparu skaits nepārsniedz 200.

Izvaddati

Teksta faila super.out vienīgajā rindā jāizvada viens skaitlis – k*m supersumma.

Piemērs

super.in super.out
41
17
4

Atsauces

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


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

Решение »

var i,od,code,k_i,m_i:integer;
k,m,t:string;
f:text;
begin
Assign(f,'super.in');
Reset(f);
readln(f,k);
readln(f,m);
Close(f);
if length(m)>length(k) then begin
t:=m;
m:=k;
k:=t;
end;
while (length(k)>1) or (length(m)>1) do begin
k_i:=0;
m_i:=k_i;
for i:=1 to length(k) do
begin
Val(Copy(k,i,1),od,code);
k_i:=k_i+od;
if i<=length(m) then begin
Val(Copy(m,i,1),od,code);
m_i:=m_i+od;
end;
end;
Str(k_i,k);
Str(m_i,m);
if length(m)>length(k) then begin
t:=m;
m:=k;
k:=t;
end;
end;
od:=k_i*m_i;
str(od,k);
if length(k)>1 then begin
k_i:=od div 10 + od mod 10;
str(k_i,k);
if length(k)>1 then k_i:=k_i div 10 + k_i mod 10;
end
else k_i:=od;
Assign(f,'super.out');
Rewrite(f);
write(f,k_i);
Close(f);
end.

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

Задание »

Atlikums

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


Uzdevums

Ievadītiem naturāliem skaitļiem A (kura ciparu skaits nepārsniedz 250) un N (1<N<10000) aprēķināt atlikumu, kas rodas skaitli A dalot ar N.

Ievaddati

Teksta faila atlikums.in pirmajā rindā dota skaitļa A, bet otrajā – skaitļa N vērtība.

Izvaddati

Teksta faila atlikums.out vienīgajā rindā jāizvada atlikuma, kas rodas A dalot ar N, vērtība.

Piemērs

atlikums.in atlikums.out
1234567890
777
360

Atsauces

Uzdevums izmantots «Baltijas algoritmizācijas skolas» projektā, kas tika organizēts ar «Sorosa fonds-Latvija» atbalstu 1996.gadā.
Autori: M.Opmanis, G.Lazdiņa


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

Решение »

var d2:longint;
k:array [1..255] of longint;
s,nt:string;
i,j,code:integer;
f:text;
begin
Assign(f,'atlikums.in');
Reset(f);
readln(f,s,d2);
Close(f);
i:=1;
while length(s)>=1 do
begin
nt:=copy(s,1,1);
Val(nt,k[i],code);
delete(s,1,1);
i:=i+1;
end;
for j:=1 to i-1 do
begin
k[j]:=(k[j] mod d2)*10;
k[j+1]:=k[j]+k[j+1];
end;
j:=trunc(k[j]/10);
Assign(f,'atlikums.out');
Rewrite(f);
write(f,j);
Close(f);
end.

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

Задание »

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