Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Олимпиадные задачи с решениями на Turbo Pascal


Служба Рассылок Subscribe.Ru
Олимпиадные задачи c решениями на Turbo Pascal

Олимпиадные задачи с решениями на Turbo Pascal


Рассылка проекта Sapisoft.By.Ru [#018]


Подписчиков на 25.02.2002 - 2669 человек.


Главная Программы Задачи Рассылки Гостевая книга Контакты

Здравствуйте!


  К концу недели ждите обновлений на сайте, а пока что предлагаем для разбора задачу "Простые гири" 3-го уровня.

Простые гири (3 уровень)


Условие:
Имеются гири с массами: 1 г, 2 г, ..., N г (N<=500000). Написать программу, распределяющую эти гири на максимально возможное количество пар так, чтобы суммарный вес гирь в каждой паре выражался простым числом.

Технические требования:
Входной файл INPUT.TXT содержит число N. Входные данные корректны. В выходной файл OUTPUT.TXT выводится список найденных пар. Все числа в выходном файле разделяются пробелами и (или) символами перевода строки.

Пример файлов входных и выходных данных:

Input.txt

Output.txt

7 1 6
7 4
5 2

Время тестирования 20 секунд на каждый тест.

Решение: (by HellMan [alexec@polarcom.ru])

{$A-,B-,D+,E-,F-,G-,I-,L+,N+,O-,P-,Q-,R-,S-,T-,V-,X-,Y+}
{$M 16384,0,655360}

program Giri;

var
  n, i, m, l: longint;

function easy(const n: longint): boolean;
var
  i: longint;
begin
  easy := true;
  for i := 2 to trunc(sqrt(n)) do
  if n mod i = 0 then begin
    easy := false;
    break;
  end;
end;

function findeasy(const n: longint): longint;
var
  i: longint;
begin
  findeasy := 0;
  for i := n + 1 to 999999 do
  if easy(i) then begin
    findeasy := i;
    break;
  end;
end;

begin
  assign(input, 'input.txt');
  reset(input);
  readln(n);
  close(input);

  assign(output, 'output.txt');
  rewrite(output);
  if n = 2 then
  writeln('1 2')
  else if easy(n) then
  for i := n - 1 downto (n + 1) div 2 do
  writeln(i, ' ', n - i)
  else

  begin
    while n > 0 do

    begin
      m := findeasy(n);
      if (m = 0) or (m >= 2 * n) then
      break;
      for i := m - n to m div 2 do
      writeln(i, ' ', m - i);
      n := m - n - 1;
    end;
  end;
  close(output);
end.


Реклама в рассылке:

RLE Banner Network    

  


Рассылки проекта Sapisoft:

Новости проекта Sapisoft [Шамис Алексей]
Информация о выходе новых версий программ и прочих обновлениях на сайте.

Уроки программирования на Turbo Pascal [Галин Павел]
Хотите стать Великим Программистом? Начните свой путь к вершине славы с изучения языка Turbo Pascal. Он как нельзя лучше подходит для начинающих программистов и в то же время используется для разработки сложных "профессиональных" программ.

Олимпиадные задачи с решениями на Turbo Pascal [Шамис Алексей]
В рассылке публикуются решения интересных олимпиадных задач различного уровня. Периодичность - 2-3 раза в неделю. Каждый выпуск содержит решение 2-3 задач с подробным анализом описанием алгоритма решения.

Задача в неделю. Олимпиадные задачи по информатике [Алексеев Александр]
Каждый понедельник в рассылке публикуется задача, которую необходимо решить и в следующий понедельник прислать программу на тестирование. Решения проверяются и в пятницу публикуется разбор и итоги тестирования.



Всегда рады видеть Вас на нашем сайте. Жду ваших предложений и замечаний, Шамис Алексей

Copyright © 2001-2002 by Shamis Alex.




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное