Информатика 2010-2011. Олимпиада есептері шығарылуымен.

F есебі минималды қосынды

Матемтаика сабағында мұғалім N сан жазды. Соңғы партада отырған Бахытжан, тізбектегі қатар жазылған сандардың минималды қосындысы қаншаға тең болатыны жайлы ойланып қалды. Бақытжанға көмектесіңіз, керекті санды қосындыны табатын бағдарламаны жазыңыз.

І-тур

А есебіProgram bakytty_kun;
var
a,b,c,d,e,y,z:integer; {е-akpan}
BEGIN
write(‘ai (01-kantar, 02-akpan…)- ‘);
readln(a);
write(‘kun – ‘);
readln(b);
write(‘jyl (от 1901 до 2099) – ‘);
readln(c);
write(‘apta kuni (1-duisembi, 2-seisembi…)- ‘);
readln(d);
IF(c mod 4=0) THEN e:=29 ELSE e:=28; {vicokosnyi jyldy tekseru}
Case (a) of
1: z:= (b-1) mod 7;
2: z:= (31 + (b-1)) mod 7;
3: z:= (31 + e + (b-1)) mod 7;
4: z:= (62 + e + (b-1)) mod 7;
5: z:= (92 + e + (b-1)) mod 7;
6: z:= (123 + e + (b-1)) mod 7;
7: z:= (153 + e + (b-1)) mod 7;
8: z:= (184 + e + (b-1)) mod 7;
9: z:= (215 + e + (b-1)) mod 7;
10: z:= (245 + e + (b-1)) mod 7;
11: z:= (276 + e + (b-1)) mod 7;
12: z:= (306 + e + (b-1)) mod 7;
13: z:= (337 + e + (b-1)) mod 7;
end;
y:=d+z;
case (y) of
1,8: write (b,’.',a,’.',c,’ – ‘,’duisembi’);
2,9: write (b,’.',a,’.',c,’ – ‘,’seisembi’);
3,10: write (b,’.',a,’.',c,’ – ‘,’sarsembi’);
4,11: write (b,’.',a,’.',c,’ – ‘,’beisembi’);
5,12: write (b,’.',a,’.',c,’ – ‘,’juma’);
6,13: write (b,’.',a,’.',c,’ – ‘,’sembi’);
7,14: write (b,’.',a,’.',c,’ – ‘,’jeksembi’);
end;
end. 

9-сынып, І-тур

А есебі

program  stroka;
var s,s1,s2:string;
i,j:integer;
begin
s1:=”;
write(‘matin engiz ‘); read(s);
writeln(‘s = ‘,s);
for i:=1 to length(s) do
if s[i] in ['0'..'9'] then s1:=s1+s[i];
for i:=1 to length(s1) do
s2:=s2+s1[(length(s1)-i+1)];
j:=1;
for i:=1 to length(s) do
if s[i] in ['0'..'9'] then begin s[i]:=s2[j];j:=j+1;end;
writeln(‘keri sandar s = ‘,s);
end.

В есебі.program tizbek;
var i,n,l:longint;
s:string; label 10;
begin
writeln(‘san tizbegin engiz ‘); read(s);
writeln(‘retin engiz ‘);  read(n);
l:=length(s);
for i:=1 to l do
if i=n then begin write(s[n]); goto 10; end;
10:end. 

С есебі.

program angime;
var i,j,n,l,s:integer;
soz:array[1..1000] of string;
procedure story;
begin
l:=length(soz[i]);
for j:=i to l-5 do
if ‘story’=copy(soz[i],j,5) then s:=s+1;
end;
begin
s:=0;
write(‘kansha jol ‘);read(n);
writeln(‘matin joldaryn engiz ‘);
for i:=1 to n do read(soz[i]);
for i:= 1 to n do story;
writeln(‘story matini ‘,s,’ ret kezdesedi ‘);
end.

F есебі минималды қосынды

Матемтаика сабағында мұғалім N сан жазды. Соңғы партада отырған Бахытжан, тізбектегі қатар жазылған сандардың минималды қосындысы қаншаға тең болатыны жайлы ойланып қалды. Бақытжанға көмектесіңіз, керекті санды қосындыны табатын бағдарламаны жазыңыз.

Мәліметтерді енгізу форматы:

Енгізу файлдың бірінші жолында n – сандардың саны берілген (1 <= n <= 1000). Екінші жолда әрқайсысы модулі бойынша 1 000 000 000 -дан аспайтын  n сан беріледі.

Мәліметтерді шығару форматы

Ұатар жазылған сандардың минмиалды қосындысын шығарыңыз
Мысал:

F.in F.out Түсініктеме

-7 10 -2 -3 4 -7 1

-8 Қатар жазлыған сандардың минимал қосындысы 3-орыннан басталып 6-орынмен а\қталады: (-2)+(-3)+4+(-7)=-8

Бағадарлау иеясы:

Алгоритм екі бөлімнен тұрады. Алдымен сол шеттен бастап оң жақ ештке дейін қосындылаймыз. Әр циклде оң жақ щет бір орынға кеміп (k2:=n-i+k+1;) отырады.  k1=k2 болғанда оң жақ шетті бір орын кемітіп тағы да қосындылаймыз. Бұл жолы да әр цикл сайын оң жақ шет бір орынға кеміп (k2:=n-i+k+1;) отырады.

Тізбекті сол жақтағы 1-ші (k1) саннан бастап оң жақ шеттегі соңғы санға (k2) дейін қосып шығамыз, нәтижені S (procedure sum ;) деп аламыз

Тізбекті сол жақтағы 1-ші (k1) саннан бастап оң жақтағы соңғының алдындағы санға дейін (k2:=n-i+k+1;) нәтижені min деп аламыз.

Егер  min>s онда min:=s деп өзгертеміз

Осылайша k1=k2 болғанша жалғастырамыз. Еегер k1=k2 болса k:=k+1  k1:=k; операторларын орындап, сол жақтағы келесі саннан бастап осы алгоритмді бірінші жолдан бастап орындаймыз.

program mini_kosyndy;
var i,k1,k2,j,k,min,s:integer;
n:longint;
a:array[1..1000000] of longint;
procedure sum;
begin
s:=0;
for j:=k1 to k2 do s:=s+a[j];
end;
begin
write(‘kansha san n= ‘);  read(n);
writeln(‘Sandar kataryn engiz ‘);
for i:=1 to n do Read(a[i]);
k:=1;min:=0;s:=0;i:=1;
while i<=2*n do
begin
if min>s then min:=s;
k1:=k; k2:=n-i+k+1;if k1=k2 then begin k:=k+1; i:=k;end;
sum;
i:=i+1;
end;
writeln(‘minsumma= ‘,min);
end.

ІІ-тур.Е есебі. 

program  ademi_takyryp;
var s:string; i,m,l2:integer; label 20,30;
procedure zhai_san;
var j,k:integer; label 10;
begin k:=2;
for j:=2 to Trunc(i/2) do
begin
if i mod j =0 then k:=k+1;
if k>2 then begin k:=2;l2:=0;goto 10;end;
end;
l2:=i; 10:end;
begin write(‘Soz engiz ‘); read(s);
m:=length(s);
if (m=2) or (m=3) then writeln(‘ademi_takyryp: ‘,s);goto 20;
i:=4; l2:=0;
while i<=m do
begin
zhai_san;
if l2=0 then goto 30;
writeln(‘ademi_takyryp: ‘,Copy(s,1,l2));goto 20;
30:i:=i+1;
end;
20:end.

F есебіprogram  mini_kosyndy;
var i,k1,k2,j,k,min,s:integer;
n:longint;
a:array[1..1000000] of longint;
procedure sum;
begin
s:=0;
for j:=k1 to k2 do s:=s+a[j];
end;
begin
write(‘kansha san n= ‘);  read(n);
writeln(‘Sandar kataryn engiz ‘);
for i:=1 to n do Read(a[i]);
k:=1;min:=0;s:=0;i:=1;
while i<=2*n do
begin
if min>s then min:=s;
k1:=k; k2:=n-i+k+1;if k1=k2 then begin k:=k+1; i:=k;end;
sum;
i:=i+1;
end;
writeln(‘min=’,min);
end.
D есебі.program  kinoteatr;
var i,n:integer;
k,l:longint;
begin
write(‘kinoteatr sany ‘); read(n);
for i:=1 to n do
begin  writeln;
write(‘katar sany ‘); read(k);
write(‘katardagy oran sany ‘);read(l); writeln;
if ((k mod 2)=1) and ((l mod 2)=1) then Write(‘ GOOD’)
else Write(‘ NOT GOOD’);
end;
end.

1 комментарий к “Информатика 2010-2011. Олимпиада есептері шығарылуымен.”

Оставить комментарий