Задачи: алгоритмическое соревнование IFF 2020. Среди начинающих
Primary tabs
Задача №1
Пусть сумма пополняемого банковского вклада составляет $A$ рублей. Процентная ставка: 3.97% годовых. Проценты начисляются каждый месяц и прибавляются к сумме вклада. И пусть вкладчик каждый месяц пополняет счёт на $B$ рублей (одинаковую сумму каждый месяц).
Написать программу для расчёта прибыли по такому вкладу за $K$ месяцев.
Т.е. на входе от пользователя вы получаете:
- $A$ -- сколько было на счете изначаль внесённые деньги
- $B$ -- сколько денег поступает на счет каждый месяц
- $K$ -- количество месяцев
В выводе программы должны быть следующие суммы:
- внесённые деньги (включает в себя сумму A);
- прибыль (включает только начисленные проценты).
Пояснения: Cчитать, что прибыль
каждого месяца рассчитывается по формуле:
$$
\frac{S\cdot 0.0397}{12},
$$
где $S$ -- сумма вклада (на начало месяца).
Считать также, что пополнение в $B$ рублей производится каждый месяц, начиная с первого, но влияет на процент только следующего месяца.
Баллы: 3
Задача №2
Предварительная справка: настоящие счеты выглядят как-то так (кости, с помощью которых отсчитывают число разрядов, нанизаны на спицы):
В некоем виртуальном пространстве есть виртуальные, опять же, ASCII-счеты, с 7-ю спицами по 10 костяшек на каждой, в сброшенном состоянии (условный ноль) они выглядят так:
---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++
Задание: визуализируйте на счетах введенное пользователем число.
Примеры:
-
Пользователь вводит: 7
Получаем:---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ +++++++---+++
-
Пользователь вводит: 28
Получаем:---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ ---++++++++++ ++---++++++++ ++++++++---++
-
Пользователь вводит: 1984
Получаем:---++++++++++ ---++++++++++ ---++++++++++ +---+++++++++ +++++++++---+ ++++++++---++ ++++---++++++
-
Пользователь вводит: 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 учетом того, что числом считаются подряд идущие цифры не только по горизонтали, но и по вертикали.
Примеры:
-
fsd334rgd rfg46gdfg ter5tge56 123gergf
Ответ: 345
-
fsd334rgd r fg ter5tge56 123gergf
Ответ: 334
-
fsd334rgd r16hyj3f7 23tge6f57 123gergf7
Ответ: 777
-
\|/ -->*<-- /o\ /_\_\ /_/_0_\ /_o_\_\_\ /_/_/_/_/o\ /@\_\_\@\_\_\ /_/_/O/_/_/_/_\ /_\_\_\_\_\o\_\_\ /_/0/_/_/20_/_/@/_\ /_\_\_\_\_0_\_\_\_\_\ /_/o/_/_/@/2/_/o/_/0/_\ [_1_]
Ответ: 2021
Баллы: 4
Задача №5
Дан текстовый файл, в котором с в ASCII-стиле нарисованы цепочки из цифр, которые связаны по горизонтали и вертикали.
Все цепочки составляют одно дерево, которое устроено так:
- всегда есть общий корень и это цифра
- по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака - (тире).
- по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).
Размер схемы не более чем 100 на 100 символов.
Примеры:
-
1------4--------------5-------6--------7 | | | |-------5---------8 | |-------6--------7--7-------9------8---1----5---3
Ответ: 10
-
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
- Log in to post comments
- 2547 reads
sergio
Tue, 01/19/2021 - 22:33
Permalink
поправка
здесь получается 6457
vedro-compota
Sun, 02/21/2021 - 16:13
Permalink
согласен, поправил условие
согласен, поправил условие теперь, так как нам нужно все-таки по вертикали)
_____________
матфак вгу и остальная классика =)