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

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

HotLog


 

Задачи

1) На станцию города прибывает за сутки N поездов. Известно время прибытия и отправки поездов. Так же известно, что на текущий путь следующий поезд может пребывать только через 5 минут после убытия предыдущего. Требуется написать программу, определяющую минимальное количество путей, необходимых для принятия всех поездов по текущему расписанию. Время задано только в часах и минутах. Время стоянки поезда от 1минуты до 12ч. Чтобы программа прошла все тесты сложность алгоритма не должна превышать N. INPUT.TXT 12 00 13 40 16 17 19 30 19 05 19 08 OUTPUT.TXT 2 2) Имеется N гирек массой 1г, 2г, 3г, ... Nг. N<=1000 Требуется вывести максимально возможное число пар, таких что их сумма - это простое число. INPUT.TXT 7 OUTPUT.TXT 1 4 2 5 6 7 3) Проверить домашнюю работу Васи Пупкина по математике, в файле задано выражение из двух целых чисел(integer) и знаков +,-,*,/ = . Нужно проверить правильность записи и вывести соответственно ВЕРНО, НЕВЕРНО, ВЫРАЖЕНИЕ НЕ КОРРЕКТНО. Некорректной записью является любая, где идут два нецифровых символа подряд, либо нарушена очередность данных: число, операция, число, равно, число. INPUT.TXT 2+3=5 OUTPUT.TXT верно 4) Вычислить значение арифметического выражение с точностью 5 знаков (вывести в файл): 1 ----- 1 + 1 ------- 3 + 1 ------ 5 + 1 -------- ... + 1 ------- 101 + 1 ----- 103 OUTPUT.TXT 0.76159 5) Найти наибольший общий делитель двух чисел, помещающихся в longint, INPUT.TXT 16 24 OUTPUT.TXT 8

Решения

Borland Pascal 7.0Borland C++ 3.1
{Задача N1}
var i,h1,m1,h2,m2,t1,t2,t,max:longint;
    m:array[0..1500] of longint;
    f:text;
begin
  assign(f,'INPUT.TXT');
  reset(f);
  for i:=0 to 1439 do m[i]:=0;
  while not eof(f) do begin
    readln(f,h1,m1,h2,m2);
    t1:=60*h1+m1;
    t2:=60*h2+m2+5;
    if t2<t1 then t2:=1440+t2;
    inc(m[t1]);
    if t2>1439 then inc(m[0]);
    dec(m[t2 mod 1440]);
  end;
  close(f);
  t:=0;max:=0;
  for i:=0 to 1439 do begin
    t:=t+m[i];
    if t>max then max:=t;
  end;
  assign(f,'OUTPUT.TXT');
  rewrite(f);
  write(f,max);
  close(f);
end.
//Задача N1
#include <stdio.h>
long i,h1,m1,h2,m2,t1,t2,t,max,m[1500];
void main(){
  for(i=0;i<1440;i++) m[i]=0;
  FILE *f=fopen("INPUT.TXT","r");
  while(!feof(f)){
    if(fscanf(f,"%ld%ld%ld%ld",&h1,&m1,&h2,&m2)<4) break;
    t1=60*h1+m1;
    t2=60*h2+m2+5;
    if(t2<t1) t2+=1440;
    m[t1]++;
    if(t2>1439) m[0]++;
    m[t2%1440]--;
  }
  fclose(f);
  t=max=0;
  for(i=0;i<1440;i++)
    if((t+=m[i])>max) max=t;
  f=fopen("OUTPUT.TXT","w");
  fprintf(f,"%ld",max);
  fclose(f);
}
{Задача N2}
var i,j,p,k,n:integer;
    m:array[0..500,0..1] of integer;
    Ok:boolean;
    f:text;

function IsPrime(x:integer):boolean;
var i:integer;
begin
  for i:=2 to x div 2 do
    if x mod i =0 then begin
      IsPrime:=false;
      exit;
    end;
  IsPrime:=true;
end;

begin
  assign(f,'INPUT.TXT');
  reset(f);
  read(f,n);
  close(f);
  k:=0;
  for i:=1 to n-1 do
    for j:=n downto i+1 do begin
      Ok:=true;
      for p:=0 to k-1 do
        if (m[p][0]=i) or (m[p][1]=i) or
           (m[p][0]=j) or (m[p][1]=j) then Ok:=false;
      if Ok then
        if IsPrime(i+j) then begin
          m[k][0]:=i; m[k][1]:=j; inc(k);
          break;
        end;
     end;
  assign(f,'OUTPUT.TXT');
  rewrite(f);
  for i:=0 to k-1 do writeln(f,m[i][0],' ',m[i][1]);
  close(f);
end.
//Задача N2
#include <stdio.h>
int i,j,p,k,n,ok,m[500][2];

int IsPrime(int x){
  for(int i=2; i<=x/2; i++)
    if(x%i==0) return 0;
  return 1;
}

void main(){
  FILE *f=fopen("INPUT.TXT","r");
  fscanf(f,"%d",&n);
  fclose(f);
  k=0;
  for(i=1;i<n;i++)
    for(j=n;j>i;j--){
      ok=1;
      for(p=0;p<k;p++)
	if((m[p][0]==i)||(m[p][1]==i)||
	   (m[p][0]==j)||(m[p][1]==j)) ok=0;
      if(ok)
	if(IsPrime(i+j)){
	  m[k][0]=i; m[k][1]=j; k++;
	  break;
	}
     }
  f=fopen("OUTPUT.TXT","w");
  for(i=0;i<k;i++) fprintf(f,"%d %d\n",m[i][0],m[i][1]);
  fclose(f);
}
{Задача N3}
var f:text;
    s:string;
    l,r,k,x,x1,x2:integer;

procedure Message(msg:string);
begin
    assign(f,'output.txt');
    rewrite(f);
    write(f, msg);
    close(f);
    halt;
end;

function StrToInt(str:string; var x:integer):boolean;
var err:integer;
begin
  val(str,x,err);
  StrToInt:=err=0;
end;

begin
  assign(f,'input.txt');
  reset(f);
  readln(f,s);
  close(f);
  for k:=1 to length(s)-1 do
    if not StrToInt(s[k],x) and not StrToInt(s[k+1],x)
      then Message('выражение не корректно');
  k:=Pos('=',s);
  if (k=0) or not StrToInt(copy(s,k+1,length(s)-k),r)
    then Message('выражение не корректно');
  dec(k); s:=copy(s,1,k);
  while (k>0) and StrToInt(s[k],x) do dec(k);
  if k=0 then Message('выражение не корректно');
  if not StrToInt(copy(s,1,k-1),x1) or
     not StrToInt(copy(s,k+1,length(s)-k),x2)
       then Message('выражение не корректно');
  if x2=0 then Message('неверно');
  case s[k] of
    '+': l:=x1+x2;
    '-': l:=x1-x2;
    '*': l:=x1*x2;
    '/': begin
           if x1 mod x2>0 then Message('неверно');
           l:=x1 div x2;
         end;
  end;
  if l=r then Message('верно') else Message('неверно');
end.
//Задача N3
#include <stdio.h>
#include <stdlib.h>

long a,b,c,n;
char ch;

void Message(char *msg){
  FILE *f=fopen("OUTPUT.TXT","w");
  fprintf(f,"%s",msg);
  fclose(f);
  exit(0);
}

void main(){
  FILE *f=fopen("INPUT.TXT","r");
  n=fscanf(f,"%ld%c%ld=%ld",&a,&ch,&b,&c);
  fclose(f);
  if(n<4) Message("выражение не корректно");
  switch(ch){
    case '+': n=a+b; break;
    case '-': n=a-b; break;
    case '*': n=a*b; break;
    case '/': if(!b) Message("неверно");
	      if(a%b) Message("неверно");
	      n=a/b; break;
    default : Message("выражение не корректно");
  }
  if(n==c) Message("верно"); else Message("неверно");
}
{Задача N4}
var  i:integer;
     s:real;
     f:text;
begin
  s:=103;
  for i:=51 downto 1 do s:=2*i-1+1/s;
  assign(f,'OUTPUT.TXT');
  rewrite(f);
  write(f,1/s:0:5);
  close(f);
end.
//Задача N4
#include <stdio.h>
float s=103;
void main(){
  for(int i=101;i>0;i-=2) s=i+1/s;
  FILE *f=fopen("OUTPUT.TXT","w");
  fprintf(f,"%f",1/s);
  fclose(f);
}
{Задача N5}
var m,n:longint;
    f:text;
begin
  assign(f,'INPUT.TXT');
  reset(f);
  read(f,m,n);
  close(f);
  while (m>0) and (n>0) do
    if m<n then n:=n mod m
           else m:=m mod n;
  assign(f,'OUTPUT.TXT');
  rewrite(f);
  write(f,m+n);
  close(f);
end.
//Задача N5
#include <stdio.h>
long m,n;
void main(){
  FILE *f=fopen("INPUT.TXT","r");
  fscanf(f,"%ld%ld",&m,&n);
  fclose(f);
  while(m*n) m<n?n%=m:m%=n;
  f=fopen("OUTPUT.TXT","w");
  fprintf(f,"%ld",m+n);
  fclose(f);
}
Решения задач предоставлены Беляевым С.Н. Автор не гарантирует 100%-ю правильность решений Скачать файлы с решениями вы можете здесь: olimp2003.rar (23Kб)


Красноярский краевой Дворец пионеров, (c)2006 - 2017, ICQ: 151483



http://vivasalut.ru/ продажа салютов.