|
2007-2008 УЧЕБНЫЙ ГОД
(II этап – районный)
ЗАДАЧИ
Максимальное время выполнения заданий: 240 мин.
Максимальное количество набранных баллов: 400
Максимальный балл за каждую из задач: 100
Максимальное время на выполнение программ: 2 секунды
|
ЗАДАЧА 1
Известно, что любое чётное число, большее 2, представимо в виде суммы 2 простых чисел, причём таких разложений может быть несколько. Впервые гипотезу о существовании данного разложения сформулировал математик Х. Гольбах.
Требуется написать программу, производящую согласно утверждению Гольбаха, разложение заданного чётного числа. Из всех пар простых чисел, сумма которых равна заданному числу, требуется найти пару, содержащую наименьшее простое число.
Входные данные
Входной файл ONE.IN содержит чётное число N (4 ≤ N ≤ 998).
Выходные данные
В выходной файл ONE.OUT необходимо вывести два простых числа, сумма которых равна числу N. Первым выводится наименьшее число.
Примеры
№ | ONE.IN | ONE.OUT |
1 | 6 | 3 3 |
2 | 992 | 73 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.IN | TWO.OUT |
1 | 6116 | YES |
2 | 1231 | NO |
Решение
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.IN | THREE.OUT |
1 | a1, h8 | NO |
2 | a1, b3 | 1 |
3 | a1, d4 | 2 |
Решение
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.IN | FOUR.OUT |
1 | 7 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
| |