Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

2007-2008 УЧЕБНЫЙ ГОД

(II этап – районный)

ЗАДАЧИ

Максимальное время выполнения заданий: 240 мин.
Максимальное количество набранных баллов: 400
Максимальный балл за каждую из задач: 100
Максимальное время на выполнение программ: 2 секунды

ЗАДАЧА 1

Известно, что любое чётное число, большее 2, представимо в виде суммы 2 простых чисел, причём таких разложений может быть несколько. Впервые гипотезу о существовании данного разложения сформулировал математик Х. Гольбах.

Требуется написать программу, производящую согласно утверждению Гольбаха, разложение заданного чётного числа. Из всех пар простых чисел, сумма которых равна заданному числу, требуется найти пару, содержащую наименьшее простое число.

Входные данные

Входной файл ONE.IN содержит чётное число N (4 ≤ N ≤ 998).

Выходные данные

В выходной файл ONE.OUT необходимо вывести два простых числа, сумма которых равна числу N. Первым выводится наименьшее число.

Примеры

ONE.INONE.OUT
163 3
299273 919

Решение

var n,i : integer;

function IsPrime(x:integer):boolean;
var  i:integer;
begin
  i:=2;
  while (i*i <= x) and (x mod i <> 0) do inc(i);
  IsPrime:= i*i > x;
end;

begin
  assign(input,'ONE.IN'); reset(input);
  assign(output,'ONE.OUT'); rewrite(output);
  read(n);
  for i:=2 to n div 2 do
    if IsPrime(i) and IsPrime(n-i) then
      begin write(i,' ',n-i); break end
end.

ЗАДАЧА 2

Требуется написать программу, определяющую, является ли четырехзначное натуральное число N палиндромом, т.е. числом, которое одинаково читается слева направо и справа налево.

Входные данные

Входной файл TWO.IN содержит натуральное число N (1000 ≤ N ≤ 9999).

Выходные данные

В выходной файл TWO.OUT следует вывести слово «YES», если число N является палиндромом, или «NO» – если нет.

Примеры

TWO.INTWO.OUT
16116YES
21231NO

Решение

var s : string;
begin
  assign(input,'TWO.IN'); reset(input);
  assign(output,'TWO.OUT'); rewrite(output);
  read(s);
  if (s[1]=s[4]) and (s[2]=s[3]) then write('YES') else write('NO');
end.

ЗАДАЧА 3

Заданы две клетки шахматной доски. Требуется определить, возможно ли попасть из одной клетки в другую одним ходом шахматного коня, а если нет, то следует выяснить, возможно ли попасть с помощью двух ходов.

Входные данные

Входной файл THREE.IN содержит координаты двух клеток в общепринятом формате: каждая координата записывается как латинская прописная буква и цифра, координаты отделены друг от друга запятой и пробелом.

Выходные данные

Выходной файл THREE.OUT должен содержать цифру «1», если возможно из одной клетки в другую попасть за 1 ход, либо цифру «2», если попасть можно за 2 хода, либо «NO», если одна клетка недостижима из другой ни за 1 ни за 2 хода.

Примеры

THREE.INTHREE.OUT
1a1, h8NO
2a1, b31
3a1, d42

Решение

var s,ans : string;
    x,y,x1,y1,x2,y2 : integer;

function check(x1,y1,x2,y2 : integer) : boolean;
begin
  check:=abs(x1-x2)*abs(y1-y2)=2;
end;

begin
  assign(input,'THREE.IN'); reset(input);
  assign(output,'THREE.OUT'); rewrite(output);
  read(s);
  x1:=ord(s[1])-96; y1:=ord(s[2])-48;
  x2:=ord(s[5])-96; y2:=ord(s[6])-48;
  ans:='NO';
  if check(x1,y1,x2,y2) then ans:='1';
  for x:=1 to 8 do
    for y:=1 to 8 do
      if check(x1,y1,x,y) and check(x2,y2,x,y) then ans:='2';
  write(ans)
end.

ЗАДАЧА 4

Задана последовательность, содержащая n целых чисел. Необходимо найти число, которое встречается в этой последовательности наибольшее количество раз, а если таких чисел несколько, то найти минимальное из них, и после этого переместить все такие числа в конец заданной последовательности. Порядок расположения остальных чисел должен остаться без изменения.

Например, последовательность 1, 2, 3, 2, 3, 1, 2 после преобразования должна превратиться в последовательность 1, 3, 3, 1, 2, 2, 2.

Требуется написать программу, которая решает данную задачу.

Входные данные

Первая строка входного файла FOUR.IN содержит число n — количество чисел во входной последовательности (3 ≤ n ≤ 100). Следующая строка содержит входную последовательность, состоящую из n целых чисел, не превышающих по модулю 100. Все числа в строке разделены пробелом.

Выходные данные

В выходной файл FOUR.OUT выводится последовательность чисел, которая получается в результате названного преобразования. Все числа в последовательности должны быть разделены пробелом.

Пример

FOUR.INFOUR.OUT
17
1 2 3 2 3 1 2
1 3 3 1 2 2 2

Решение

var  i,m,k,n : integer;
     a, b: array[-100..100] of integer;
begin
  assign(input, 'FOUR.IN'); reset(input);
  assign(output, 'FOUR.OUT'); rewrite(output);
  read(n);
  m:=0; fillchar(b,sizeof(b),0);
  for i:=1 to n do begin
    read(a[i]);
    inc(b[a[i]]);
    if b[a[i]]>m then m:=b[a[i]];
  end;
  for i:=100 downto -100 do
    if b[i]=m then k:=i;
  for i:=1 to n do
    if a[i]<>k then write(a[i],' ');
  for i:=1 to m do write(k,' ')
end.

Решения задач предоставлены Беляевым С.Н.
Автор не гарантирует 100%-ю правильность решений
Скачать архив задач, решений и тестов вы можете здесь: Olimp_2007.rar



Красноярский краевой Дворец пионеров, (c)2006 - 2024, ИНН 246305493507, E-mail: admin@acmp.ru