Задачи: алгоритмическое соревнование IFF 2020. Среди начинающих

Задача №1

Пусть сумма пополняемого банковского вклада составляет $A$ рублей. Процентная ставка: 3.97% годовых. Проценты начисляются каждый месяц и прибавляются к сумме вклада. И пусть вкладчик каждый месяц пополняет счёт на $B$ рублей (одинаковую сумму каждый месяц).

Написать программу для расчёта прибыли по такому вкладу за $K$ месяцев.

Т.е. на входе от пользователя вы получаете:

  1. $A$ -- сколько было на счете изначаль внесённые деньги
  2. $B$ -- сколько денег поступает на счет каждый месяц
  3. $K$ -- количество месяцев

В выводе программы должны быть следующие суммы:

  1. внесённые деньги (включает в себя сумму A);
  2. прибыль (включает только начисленные проценты).

Пояснения: Cчитать, что прибыль
каждого месяца рассчитывается по формуле:
$$
\frac{S\cdot 0.0397}{12},
$$
где $S$ -- сумма вклада (на начало месяца).

Считать также, что пополнение в $B$ рублей производится каждый месяц, начиная с первого, но влияет на процент только следующего месяца.

Баллы: 3

Задача №2

Предварительная справка: настоящие счеты выглядят как-то так (кости, с помощью которых отсчитывают число разрядов, нанизаны на спицы):
счеты

В некоем виртуальном пространстве есть виртуальные, опять же, ASCII-счеты, с 7-ю спицами по 10 костяшек на каждой, в сброшенном состоянии (условный ноль) они выглядят так:

---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++
---++++++++++

Задание: визуализируйте на счетах введенное пользователем число.

Примеры:

  1. Пользователь вводит: 7
    Получаем:
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    +++++++---+++
  2. Пользователь вводит: 28
    Получаем:
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ++---++++++++
    ++++++++---++
    
  3. Пользователь вводит: 1984
    Получаем:
    ---++++++++++
    ---++++++++++
    ---++++++++++
    +---+++++++++
    +++++++++---+
    ++++++++---++
    ++++---++++++
    
  4. Пользователь вводит: 2021
    А наша программа отвечает:
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ++---++++++++
    ---++++++++++
    ++---++++++++
    +---+++++++++
    

Баллы: 3

Задача №3

У вас есть функция:

program my_program;
type b = array[1..10] of integer;
    
function filling_array( min, max : integer ) : b;
  var  count, i, j, l, k, number : integer;
      arr : b;
begin  
  count := 0;
  k := 1;
  randomize; 
  while( count < 10 ) do  
  begin
    number := random( max - (min + 1) + min ) ; 
    write( number, ' ' ); 
    j := 0; 
    for i := low( arr ) to k do
    begin
      if( arr[i] <> number ) then 
      begin
          j += 1; 
          if( j = k ) then
          begin
            count += 1;
            k += 1; 
            arr[count] := number; 
          end;
      end
      else
        break;
    end;
  end;
  filling_array := arr; 
end; 
  • Что делает эта функция? (ответьте письменно)
  • В данной функции есть лишние переменные, перепишите код так, чтобы они не использовались. (и напишите небольшой комментарий о том, почему они лишние)

Баллы: 3

Задача №4

Имеется текстовый файл в котором содержится не более 30 строк, в каждой строке не более 30 символов (пробелы тоже считаются символами). Цифры и другие символы перемешаны в каждой строке.

Задание: найдите максимальное число, c учетом того, что числом считаются подряд идущие цифры не только по горизонтали, но и по вертикали.

Примеры:

  1. fsd334rgd
    rfg46gdfg
    ter5tge56
    123gergf

    Ответ: 345

  2. fsd334rgd
    r      fg
    ter5tge56
    123gergf
    

    Ответ: 334

  3. fsd334rgd
    r16hyj3f7
    23tge6f57
    123gergf7
    

    Ответ: 777

  4. 
              \|/
            -->*<--
              /o\
             /_\_\
            /_/_0_\
           /_o_\_\_\
          /_/_/_/_/o\
         /@\_\_\@\_\_\
        /_/_/O/_/_/_/_\
       /_\_\_\_\_\o\_\_\
      /_/0/_/_/20_/_/@/_\
     /_\_\_\_\_0_\_\_\_\_\
    /_/o/_/_/@/2/_/o/_/0/_\
             [_1_]
    

    Ответ: 2021

Баллы: 4

Задача №5

Дан текстовый файл, в котором с в ASCII-стиле нарисованы цепочки из цифр, которые связаны по горизонтали и вертикали.
Все цепочки составляют одно дерево, которое устроено так:

  • всегда есть общий корень и это цифра
  • по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака - (тире).
  • по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).

Размер схемы не более чем 100 на 100 символов.

Примеры:

  1. 1------4--------------5-------6--------7
           |              |
           |              |-------5---------8
           |
           |-------6--------7--7-------9------8---1----5---3
    

    Ответ: 10

  2. 1------4------8--------5-------6--------7
           |      |        |
           |      |        |-------5---------8
           |      |                
           |      |--------8-8-8---8----8
           |     
           |-------6--------7--7
           |--------------5-5--5--5  
    

    Ответ: 8

Баллы: 6

Задача №6

Написать программу, которая выводит решения квадратного уравнения
$$
ax^2+bx+c=0,
$$
где $a,\ b,\ c$ -- целые числа, причём $a\neq0$.

Решения представляются формулами:
$$
x_1 = \frac{-b+\sqrt{b^2-4ac}}{2a},\ x_2 = \frac{-b-\sqrt{b^2-4ac}}{2a}.
$$

Решения выводить для заданных целых $a,\ b,\ c$ следующим образом.
Если $r = \sqrt{b^2-4ac}$ является целым числом, то вывести решения в виде

format('\frac{%d}{%d}', [-b+r, 2*a]);
format('\frac{%d}{%d}', [-b-r, 2*a]);

Если $r = \sqrt{b^2-4ac}$ не является целым числом, и $b\neq 0$, то решения выводить так:

format('\frac{%d+\sqrt{%d}}{%d}', [-b, b*b-4*a*c, 2*a]);
format('\frac{%d-\sqrt{%d}}{%d}', [-b, b*b-4*a*c, 2*a]);

(используйте

uses SYSUTILS; 

сразу после навзания команды, чтобы функция format заработала)

Пример:

    a := 1;
    b := 3;
    c := 5;

Вывод программы:

\frac{-3+\sqrt{-11}}{2}
\frac{-3-\sqrt{-11}}{2}

Это код для latex:
$$
\frac{-3+\sqrt{-11}}{2},\ \frac{-3-\sqrt{-11}}{2}.
$$

Если $r = \sqrt{b^2-4ac}$ не является целым числом, и $b=0$, то не печатать b при выводе решений, и не печатать унарный "+" перед корнем.
Пример:

    a := 1;
    b := 0;
    c := 13;

Вывод программы:

\frac{\sqrt{-11}}{2}
\frac{-\sqrt{-11}}{2}

$$
\frac{\sqrt{-13}}{2},\ \frac{-\sqrt{-13}}{2}
$$

Баллы: 4

Задача №7


// Для положительного целого числа b найти положительные целые числа a и c,
// такие, что a^2 + b^2 = c^2
// Задачу решить без перебора.   
begin
    b := 99641;
    number := b * b;

    if (number mod 2 <> 0) then
    begin
        a := number div 2;
        c := a + 1;
    end else begin
        a := ((number div 2) - 1) div 2;
        c := a + 2;
    end;    
    writeln(a, ' ** 2 + ', b, ' ** 2 = ', c, ' ** 2');
    writeln(a*a, ' + ', number, ' = ', c * c);
    writeln(a*a + number = c * c);
end.

Задание: Объяснить (письменно), почему эта программа приводит к цели.

Баллы: 5

fsd334rgd
r16hyj3f7
23tge6457
123gergf7

здесь получается 6457

vedro-compota's picture

согласен, поправил условие теперь, так как нам нужно все-таки по вертикали)

_____________
матфак вгу и остальная классика =)