Воскресенье, 28.05.2023, 12:53
Информатика и математика в Плесской школе
Приветствую Вас Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Некоторые задачи I и II туров олимпиады по программированию.

2016-2017 год.

Задача 1. Конфеты.

На столе стоят три вазы с конфетами. В левой вазе лежат A конфет, в средней вазе лежат B конфет, в правой вазе лежат C конфет. Лена съедает одну конфету из левой вазы, затем одну конфету из средней вазы, затем из правой, средней, левой, средней, правой, средней и т. д. (слева направо, затем налево, опять направо и т.д.) Если Лена хочет взять конфету из какой- то вазы, а конфет там нет, она расстраивается и идёт спать. Определите, сколько конфет съест Лена. Программа получает на вход три целых неотрицательных числа A, B, C – количество конфет в левой, средней, правой вазе. Сумма трёх данных чисел не превосходит 2×109.

Автор: Воротников Илья (10 класс), система программирования "Исполнители 2.5"

Программа
  {
  int a,b,c,k;
  coutln << "Первый горшок";
  cin >> a;
  coutln << "Второй горшок";
  cin >> b;
  coutln << "Третий горшок";
  cin >> c;

  while(a>0 & b>0 & c>0)
   {
   if(a>0 & c>0)
    {
    a=a-1;
    k=k+1;
    }
   if(b>0 & c>0)
    {
    b=b-1;
    k=k+1;
    }
   if(a>0 & c>0)
    {
    c=c-1;
    k=k+1;
    }
   if(a>0 & b>0)
    {
    b=b-1;
    k=k+1;
    }
   coutln << a <<" " << b <<" "<< c;
   }
  coutln << k;
  }

Задача 2. Расписание кружка

Володе очень понравились задачи олимпиады по информатике, поэтому он решил ходить на занятия кружка по программированию. Придя на первое занятие кружка, он узнал, что занятия будут проходить еженедельно в один и тот же день недели. Помогите Володе составить календарь занятий до конца года определите даты всех занятий, начиная с первого занятия и до конца года. Программа получает на вход два числа, записанных в разных строках: номер месяца и номер дня месяца, когда проходит первое занятие. Номер месяца может быть одним из четырёх возможных чисел 9, 10, 11, 12. Номер дня месяца число от 1 до 30 для сентября и ноября (месяцы с номерами 9 и 11) или от 1 до 31 для октября и декабря (месяцы с номерами 10 и 12).Программа должна вывести даты всех занятий кружка до конца года в хронологическом порядке, по одной дате в строке, сначала месяц, затем день месяца, через пробел. Занятия проходят еженедельно, в тот же день недели, что и первое занятие. Формат вывода дат такой же, как в условии. Считайте, что каникулы отсутствуют, а последнее занятие может происходить в любой день декабря, в том числе и 31 числа.

Автор: Леонид Рева (9 класс), система программирования "Исполнители 2.5"

Программа
  {
  int m, d;
  cout << "Введи номер месяца";
  cin >> m;
  cout << "Введи номер дня ";
  cin >> d;
  int i, k;
  for(i = 1;i < 31;i = i + 1)
    {
    if(m > 12) break;
    if(d > 31)
      {
      if(m==9 | m==11) d=d-30;
      if(m==12 | m==10) d=d-31;
      m = m + 1;
      }
    if( ( m == 9 | m == 11) & d <31)
      {
      coutln << m << " " << d;
      d = d + 7;

      }
    if( ( m == 10 | m == 12) & d < 30)
      {
      coutln << m << " " << d;
      d = d + 7;

      }
    }
  }            

 Задача 3. Считалка

Для выбора водящего в детской игре N человек становятся в круг, после чего произносится считалка. На первом слове считалки указывается на первого человека в кругу, на втором слове – на второго человека и т. д. После N-го человека снова идёт первый человек (все люди в кругу пронумерованы числами от 1 до N, круг зацикливается, после человека с номером N идёт человек с номером 1). Всего в считалке M слов. Определите, на какого человека придётся последнее слово считалки. Программа получает на вход два целых положительных числа. Первое число N – количество людей в кругу. Второе число M – количество слов в считалке. Оба числа не превосходят 109.Программа должна вывести одно целое число от 1 до N – номер человека в кругу на которого придётся последнее слово считалки.

Автор:Рева Леонид (9 класс)

Программа
  {
  int M,N,h,p;
  cout << "Введи кол-во человек";
  cin >> N;
  cout << "Введи число слов";
  cin >> M;

  if(N<M & M/2!=N)
  {
  p=M%N;
  if(p==0) coutln << N;
  else
  coutln << p;
  }

  if(N>M) coutln << M;
  if(M/2==N) coutln << N;
  if(N==M) coutln << N;
 }    

              

Автор: Илья Воротников (10 класс)  

Программа
  {
  int n,m,i;
  cout << "Количество людей";
  cin >> n;
  cout << "Количество слов";
  cin >> m;

  if(n<m)
  {
  i=m%n;
  if(i==0)
  i=n;
  cout << i;
  }

  if(n>m)
  cout << m;
  if(n==m)
   cout << m;
  }               

  Задача 4. Клетчатые прямоугольники
Художник-супрематист    решил  закрасить клетчатый  прямоугольник.  Вначале  он  закрасил клетки  по  периметру  в  один  ряд.   Подсчитал количество  закрашенных  клеток,  их  оказалось  N. Какое  максимальное  количество   клеток  ему может потребоваться закрасить?  (Остались не закрашенными) Входные данные: натуральное четное число N –количество клеток, которые закрашены по периметру, 4 ≤ N ≤ 100. Выходные данные:  максимальное  количество клеток, которое художнику может потребоваться закрасить ? 

Автор:Рева Леонид (9 класс)

Программа
  {
  int x, y, N,p,pmax;
  cout << "кол-во клеток по периметру";
  cin >> N;
  pmax=0;
  for(x = 1;x <= N;x = x + 1)
    {
    for(y = 1;y <= N;y = y + 1)
      {
      if((x*2) +(y - 2)*2 == N)
        {
         p=(x*y)-N;
         if(pmax<p) pmax=p;
         }
       }
    }
     coutln<< pmax

}           

Решение организаторов олимпиады

var
k, a, b: longint;
begin
read(k);
a := k div 4 + 1;
b := k div 2 - a + 2;
writeln(a * b - k);
end.

 

 

 

 

 

 

 

Задача 5. Диофантово уравнение
Петя  очень  любит  решать  уравнения.  Однажды  в  одной  математической книжке ему на глаза попалось уравнение  x  + y  + xy  = n. Петя захотел узнать, сколько пар неотрицательных целых чисел (x,  y), являются решениями этого уравнения.

Автор: Илья Воротников (10 класс)                                                                                

Программа
  {
  int x,y,n,k;
  cin >> n;
  for(x=0;x<100;x=x+1)
   {
   for(y=0;y<100;y=y+1)
    {
    if(x+y+x*y==n)
    k=k+1;
    }
   }
  coutln << k;
  }            

Решение организаторов олимпиады

Замечание:  Заметим,  что  если  x  +  y  +  xy  =  n,  то  1+  x  +  y  +  xy  =  n+1. Тогда (х+1)(у+1) = n+1. Напишем алгоритм нахождения всех делителей числа n+1. 
Простым перебором от 1 до n  найдем все пары делителей

var n, k, s : longint;
begin
read (n);
s :=0;
for k:=1 to n+1 do
if (n+1) mod k = 0 then s:=s+1;
write (s);
end.

 

 

                            

Поиск
Календарь
«  Май 2023  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Учительский портал
    Copyright MyCorp © 2023