|
1.
Королевский карлик
Король издал приказ об отыскании
в королевстве самого маленького человека для
предоставления его ко двору в качестве королевского карлика.
Необходимо сказать королю сколько у него подданных самого
низкого роста, и каков этот рост.
(N≤500000,
все числа ≤ 2*109
)
|
|
Программа на
Turbo
Pascal:
program olimp1;
uses crt;
const k1='Input1.pas';
k2='Output1.pas';
var
input1,output1: text;
n,min,a,m,i :longint;
begin clrscr; textcolor(7); textbackground(10);
assign(input1,k1); reset(input1);
assign(output1,k2); rewrite(output1);
readln(input1,n); read(input1,min); m:=1;
for
i:=2 to n do begin read(input1,a);
if
a<min then begin min:=a; m:=1; end
else if a=min then m:=m+1; end;
writeln(output1,'min=',min:3);
writeln(output1,'n=',m:3);
close(output1);
end.
|
2.
Семеричная цифра
Вводится натуральное десятичное
число
N>99. Определить предпоследнюю цифру
этого числа, переведенного в семеричную систему счисления.
( количество цифр числа ≤ 500000 )
|
Программа на
Turbo Pascal:
program a22;
uses crt;
const k1='Input2.PAS';
k2='Output2.PAS';
var
Input2,Output2 :text;
i,n,m,d,j,k :integer;
c :char;
begin clrscr; textcolor(10); textbackground(5);
assign(Input2,k1); reset(Input2);
assign(Output2,k2); rewrite(Output2);
read(Input2,c); val(c,k,i);
if k>=7 then begin n:=k-7; m:=1; end
else begin n:=k; m:=0; end;
While not seekeof(Input2) do begin
read(Input2,c); val(c,k,i);
j:=10*n+k; n:=j mod 7; j:=j div 7;
m:=(m*10+j) mod 7; d:=(m*10+j) div 7;
end;
writeln(Output2,m:2);
close(Output2); end.
|
3.
Параллелограммы
В семье математиков Затылочевских есть интересная
игра. Они по очереди называют целые числа, а потом разбивают всю
последовательность на отрезки по 6 чисел. Каждая пара считается
координатами одной из вершин параллелограмма, для которого
вычисляется его площадь. Параллелограмм считается «удачным», если
его площадь является целым чётным числом. Младший член семьи
Затылокочевских захотел вести вычисления с помощью компьютера.
Помогите ему.
(Кол.
строк≤50000, все числа ≤ 2*109)
|
Программа на
Turbo Pascal:
program a23;
uses crt;
const k1='Input3.pas';
k2='Output3.pas';
var
Input3,Output3: text;
x1,x2,x3,y1,y2,y3,k,i,m,n,d: longint;
d1,d2,d3,p,s: real;
begin clrscr; textcolor(10);textbackground(5);
assign(Input3,k1); reset(Input3);
assign(Output3,k2); rewrite(Output3);
m:=0;
While not seekeof(Input3) do begin
readln(Input3,x1,y1,x2,y2,x3,y3);
d1:=sqrt(sqr(x1-x2)+sqr(y1-y2));
d2:=sqrt(sqr(x1-x3)+sqr(y1-y3));
d3:=sqrt(sqr(x3-x2)+sqr(y3-y2));
p:=(d1+d2+d3)/2;
s:=sqrt(p*(p-d1)*(p-d2)*(p-d3));
d:=trunc(s);
if
d mod 2=0 then m:=m+1; end;
writeln(Output3,m:3);
close(Output3);
end.
|
4.
Счастливые
билетики
В городе Екцепил в связи с использованием билетов
на городском транспорте, как лотерейных билетов, их номера стали
состоять из различного количества цифр. Поэтому теперь билет
стали считать счастливым, если совокупность всех его цифр можно
разбить на две части так, чтобы сумма цифр одной части равнялись
сумме цифр другой. Требуется написать программу, которая среди
заданных номеров билетов найдет счастливые.
(N≤3000, кол.
цифр ≤ 100
)
|
Программа на
Turbo Pascal:
program a24;
uses crt;
const k1='Input4.pas';
k2='Output4.pas';
label vo;
var
Input4,Output4: text;
d1,d2,p,k,i,m,n,l,j,d: integer; s: string;
a:
array[1..100]
of integer;
begin
clrscr; textcolor(10);textbackground(5);
assign(Input4,k1); reset(Input4);
assign(Output4,k2); rewrite(Output4);
readln(Input4,n);
for
i:=1 to n do begin
readln(Input4,s);
for
j:=1 to 100 do a[j]:=0; j:=0;
for
k:=1 to length(s) do begin
val(s[k],m,d); j:=j+1; a[j]:=m; end;
if
j=1 then begin p:=0; goto vo; end;
if
j=2 then begin
if
a[1]=a[2] then p:=1 else p:=0;
goto vo; end;
if
j>2 then begin p:=0;
d1:=0; for k:=1 to j do d1:=d1+a[k];
for k:=1 to j do begin d2:=0;
for l:=1 to k do
d2:=d2+a[l];
if d2=d1-d2 then
p:=1; end; end;
vo:
writeln(Output4,p:3); end;
close(Output4);
end.
|