вторник, 22 октября 2013 г.

Всероссийская олимпиада школьников по информатике 2013-2014 уч год. Школьный этап. Решение

1)
var d, R, n, L:integer;
begin

readln(d);
readln(R);
readln(n);

if (d>0) and (R>0) and (n>0) and (d<=100) and (R<=100) and (n<=100) and (d<R) then begin
L:=(2*R+2*d)*n-(d*2)*(n-1);
writeln(L);
end;

end.
2)
var A, B, C:integer;
begin
readln(A);
readln(B);
readln(C);

if (A<>0) and (abs(A)<=100) and (B>0) and (C>0) and (C<=100) and (B<=100) then begin
if (A-B<0) and (A>0) then writeln(A-B-1+C) else writeln(A-B+C)
end;


end.
3)
var k,i,n:integer;
s:string;
begin
read(s);
k:=length(s);
if (k<=100) then  begin
n:=k div 3;
for i:=1 to n do
begin
k:=k-3;
insert('.',s,k+1);
end;
if (s[1]='.') then delete(s,1,1);
write(s);
end;
end.
4)
var a,b,k,i,h,sum:integer;
begin
readln(a);
readln(b);
k:=0;
if(a<=b) then begin
for i:=a to b do
begin
sum:=0;
h:=i;
while(h>0)do
begin
sum:=sum+h mod 10;
h:=h div 10;
end;
if(sum mod 2=0) then k:=k+1;
end;
write(k);
end;
end.

воскресенье, 20 октября 2013 г.

Тренировочный тур к школьной олимпиаде 9-11 классов (2013) с решением

Задача 1-Сокращаем перемены

Ограничение времени:1 с
Ограничение памяти:2048 M
Требуется подсчитать, на сколько минут раньше будет заканчиваться k-й урок, если все перемены сократить на 5 минут.

Формат входных данных

Вводится одно натуральное число k, не превосходящее 7.

Формат выходных данных

Выведите одно натуральное число — время в минутах.

Пример

ВводВывод
3
10


Решение:

var
k:integer;
begin
readln(k);
case k of
1..7:writeln(5*k-5);
else
writeln('уроков не может быть больше 7');
end;
end.

Задача 2-Шестеренки

Ограничение времени:1 с
Ограничение памяти:2048 M
Даны две сцепленные шестеренки. У одной шестеренки N зубцов, у другой — K. Требуется найти, какое минимальное число поворотов на один зубчик требуется сделать, чтобы шестеренки вернулись в исходное состояние.

Формат входных данных

Вводится два натуральных числа N и K, каждое из которых не превосходящих 10 миллионов. Каждое число вводится в отдельной строке.

Формат выходных данных

Выведите искомое количество зубчиков. Гарантируется, что оно не более миллиарда.

Пример

ВводВывод
2
3
6
6
21
42

Решение
var
  N, K, c, sum: longint;

function nok(N,K:longint):longint; 
var i:longint;
begin
  for i:=1 to N do
    if (N mod i = 0) and (K mod i = 0) then nok:=i;
end;

begin
  read(N,K);

  N:=N div nok(N,K);
  K:=K div nok(N,K);
  repeat
    sum := sum + N;
  until (sum mod K) = 0;
  write(sum*nok(N,K));
end.

Задача 4-Распаковка строчки

Ограничение времени:1 с
Ограничение памяти:2048 M
Будем рассматривать только строчки, состоящие из заглавных латинских букв. Например, рассмотрим строкуAAAABCCCCCDDDD. Длина этой строки равна 14. Поскольку строка состоит только из латинских букв, повторяющиеся символы могут быть удалены и заменены числами, определяющими количество повторений. Таким образом, данная строка может быть представлена как 4AB5C4D. Длина такой строки 7. Описанный метод мы назовем упаковкой строки.
Напишите программу, которая берет упакованную строчку и восстанавливает по ней исходную строку.

Формат входных данных

Программа получает на вход одну упакованную строку. В строке могут встречаться только конструкции вида nA, где n — количество повторений символа (целое число от 2 до 99), а A — заглавная латинская буква, либо конструкции вида A, то есть символ без числа, определяющего количество повторений. Максимальная длина строки не превышает 80. Входная строка обязательно заканчивается символом перевода строки.

Формат выходных данных

В выходной файл выведите восстановленную строку.

Пример

ВводВывод
3A4B7D
AAABBBBDDDDDDD
22D7AC18FGD
DDDDDDDDDDDDDDDDDDDDDDAAAAAAACFFFFFFFFFFFFFFFFFFGD

Решение

var
  s:string;
  i,k:integer;
begin
 readln(s);
 i:=1;
     while i<=length(s) do
     begin
      k:=0;
      while (s[i]>='0') and (s[i]<='9') do begin
      k:=k*10;
      k:=k+ord(s[i]) - ord('0');
      inc(i);
      end;
      if k=0 then
      write(s[i])
      else
      while k>0 do begin
      dec(k);
      write(s[i]);
      end;
      inc(i);
      end;
 end.

четверг, 10 октября 2013 г.

Программа сортировки элементов ниже побочной диагонали

Данная программа отсортирует все элементы матрицы, находящиеся ниже побочной диагонали. 3 процедуры: ввод, сортировка и вывод.

const N=3;
type mas=array[1..N,1..N] of integer;
mass=array[1..(N*N-N) div 2] of integer;


procedure vvod(var m:mas);
var i,j:integer;
begin
randomize();
for j:=1 to N do
begin
for i:=1 to N do
begin
m[i,j]:=random(100)-50;
write(m[i,j]:4);
end;
writeln();
end;
writeln;
writeln;
end;

procedure vivod(m:mas);
var i,j:integer;
begin
for j:=1 to N do
begin
for i:=1 to N do
write(m[i,j]:4);
writeln();
end;
end;

procedure sort(var m:mas);
var i,j,k,b:integer;
a:mass;
begin
k:=1;
for j:=2 to N do
begin
for i:=N downto N-j+2 do
begin
a[k]:=m[i,j];
k:=k+1;
end;
end;


for j:=1 to ((N*N-N) div 2) do
begin
for i:=1 to ((N*N-N) div 2)-j do
begin
if(a[i]<a[i+1])then
begin
b:=a[i];
a[i]:=a[i+1];
a[i+1]:=b;
end;
end;
end;


k:=1;
for j:=2 to N do
begin
for i:=N-j+2 to N do
begin
m[i,j]:=a[k];
k:=k+1;
end;
end;

end;

var m:mas;
begin
vvod(m);
sort(m);
vivod(m);
end.