A1048

Задача. Одним из наиболее часто встречающихся видов списка является стек-список, в котором все включения и исключения элементов делаются только на одном его конце — вершине стека. Механизм функционирования стека хорошо отражен в другом его названии — список типа «LIFO» (last in first out) -«последним вошел — первым вышел»).

При работе со стеком предполагаются две операции: занесение очередного элемента в вершину стека и удаление элемента, находящегося в вершине стека. Тем самым операция удаления элемента из стека может быть применена только к элементу, помещенному в стек самым последним. И, следовательно, любой элемент не может быть удален из стека раньше, чем будут удалены все элемента, помещенные в стек после него.

Составить процедуры, реализующие операции занесения элемента в стек и удаления элемента из его вершины.

Тесты:

Ввод Вывод Комментарий
push 5push 7

pop

push 11

pop

exit

okok

7

ok

11

bye

Пройден
push 1pop

pop

push 15

pop

exit

ok1

error

ok

15

bye

Пройден
poppush 7

push 9

push 9

push 1

pop

pop

pop

pop

exit

errorok

ok

ok

ok

1

9

9

7

bye

Пройден

Решение:

В структуре stack, реализованной с помощью массива, опишем операции добавления элемента в стек и удаления элемента из его вершины.

Данные операции выполняются после получения соответствующих команд.  В программе будем выполнять дополнительную проверку, чтобы избежать удаления элемента из пустого стека.

Программа завершает работу после получения команды exit.

С работой программы можно ознакомиться здесь.

Related Images:

А702б

Задача.  Дана квадратная матрица порядка n. Получить вектор  Ab, где b-вектор, элементы которого вычисляются по формулам:

[latex]b_{i}=\begin{cases}\frac{1}{i^{2}+2} & \text{, if i mod 2=0} \\ \frac{1}{i} & \text{, other case } \end{cases}[/latex]

i=(1,…,n).

Тесты:

Вход Выход Комментарий
4
1 2 1 1
1 3 6 9
1 2 1 1
1 6 3 18
1.72222 4 1.72222 4 Пройден
3
0 0 0
1 1 1
2 2 2
0 1.5 3 Пройден
4
1 2 2 9
3 4 1 18
1 1 1 1
0 0 0 0
2.5 5 1.55556 0 Пройден
Решение:

Согласно условию находим вектор b. По формуле [latex]Ab_{i}=\sum_{j=1}^{n}A_{ij}b_{j}[/latex], i=(0,…,n) находим произведение матрицы на вектор.

С работой программы можно ознакомится здесь.

Related Images:

AA1

Задача.  В заданной строке заменить подряд идущие пробелы на один пробел.

Тесты:

Ввод Вывод Комментарий
as  fg   t as fg t Пройден
   rty g  uio  rty g uio Пройден
Решение:

Будем записывать подходящие элементы в новую строку. Сразу добавим первый символ, он нам подходит вне зависимости от того, пробел он, или нет. Далее просмотрим каждый символ строки, если он нам подходит, запишем в новую строку.  Нулевой элемент уже добавлен, поэтому цикл начинается с единицы, что позволяет проверять предыдущий символ без выхода за границы.

С работой программы можно ознакомиться здесь.

Related Images:

А119б

Задача.  Вычислить бесконечную сумму с заданной точностью [latex]\varepsilon(\varepsilon >0)[/latex]. Считать, что требуемая точность достигнута, если несколько первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем [latex]\varepsilon[/latex], это и все последующие слагаемые можно уже не учитывать. Вычислить:

[latex]\sum_{i=1}^{\infty}{\frac{1}{i(i+1)}}[/latex].

Тесты:

[latex]\varepsilon[/latex] s Комментарий
0.035 0.800 Пройден
0.085 0.667 Пройден
0.025 0.833 Пройден
Решение:

С помощью цикла подсчитываем сумму.

С работой программы можно ознакомиться здесь.

Related Images:

Ю11.6

Задача. Метод прямоугольников. Вычислить определенный интеграл [latex]I=\int_{a}^{b}{f(x)dx}[/latex] методом прямоугольников: [latex]\int^b_a f(x)\,dx \approx h (\frac{y_0}{2} + y_1 + \ldots + y_{n-1}+\frac{y_{n}}{2})[/latex], где [latex]n[/latex] — количество отрезков разбиения;  [latex]y_{0},y_{1},…,y_{n}[/latex] — значения функции на концах отрезков.

Вычислим для функции [latex] f(x)=2x^{3}-7x+4[/latex]:

[latex] \int_{0}^{2}{(2x^{3}-7x+4)dx}=2[/latex] Решение: 

Введена функция, которая подсчитывает значение в точке.  Согласно формуле в условии, вычисляем требуемое значение.

В условии приведена более точная формула, чем в учебнике.

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

Количество отрезков разбиения на [a,b] Результат
50 2.0032
500 2.000032
1000 2.000008
5000 2.00000032

С работой программы можно ознакомиться здесь.

Related Images:

Ю4.23

Латинский квадрат. Латинским квадратом порядка n называется квадратная таблица размером n, каждая строка и каждый столбец которой содержит все числа от 1 до n. Для заданного n в матрице L(n;n) построить латинский квадрат порядка n.

Тесты:

Ввод Вывод Комментарий
5 1 2 3 4 5

2 3 4 5 1

3 4 5 1 2

4 5 1 2 3

5 1 2 3 4

Пройден
4 1 2 3 4

2 3 4 1

3 4 1 2

4 1 2 3

Пройден

Код на С++

Код на Java

 

Решение:

В предложенном варианте заполнения первый элемент строки — это ее номер увеличенный на единицу. Последующий элемент есть увеличенный на единицу предыдущий (если он не равен n), или 1 (в противном случае).

С работой программы на С++ можно ознакомиться здесь, а на Java здесь.

Related Images:

А156а

Задача. Даны натуральное число [latex]n[/latex], действительные числа [latex]x_{1}, \cdot x_{n},(n\geq 3)[/latex]. Вычислить:

[latex](x_{1}+2x_{2}+x_{3})(x_{2}+2x_{3}+x_{4}) \cdot (x_{n-2}+2x_{n-1}+x_{n})[/latex].

Тесты:

Ввод Вывод Комментарий
6 1 1 1 1 1 1 256 Пройден
9 1 2 0 1 2 0 1 2 0 18000 Пройден
5 5 5 5 5 5 8000 Пройден

Код на С++

Код на Java

 

Решение:

Для нахождения данного произведения воспользуемся массивом. Поскольку в условии указывается нумерация с единицы, то описывая и в дальнейшем обращаясь к массиву, учтем что индекс элемента равен номеру минус единица. В условии продолжения цикла номер не должен превышать n-2, чтобы при подсчете мы не вышли за границу массива.

С работой программы на С++ можно ознакомиться здесь, а на Java здесь.

Related Images:

Ю3.9

Задача. Голодная зима. Суточный рацион коровы составляет [latex]u[/latex] кг сена, [latex]v[/latex] кг силоса и [latex]w[/latex] кг комбикорма. В хозяйстве, содержащем стадо из [latex]k[/latex] голов, осталось [latex]s[/latex] кг сена, [latex]t[/latex] кг силоса и [latex]f[/latex] кг комбикорма.. В стаде ежедневно погибает [latex]p[/latex]% коров; ежедневно [latex]q[/latex]% оставшегося сена сгнивает; [latex]r[/latex]% силоса разворовывается колхозниками; [latex]t[/latex]% комбикорма распродает зав. фермой. Когда нельзя будет кормить всех оставшихся коров по полному рациону? Какой из видов кормов кончится раньше других?

Тесты:

u v w k s t f p q r h Результат Комментарий
10 10 5 50 2000 1500 1000 2 5 2 2 Через 2 дн. силос закончится. Пройден
15 10 10 50 1500 1500 1000 4 5 3 3 Через 1 дн. сено закончится.

Через 1 дн. комбикорм закончится.

Пройден
10 5 5 50 2000 2000 2000 2 5 5 2 Через 3 дн. сено закончится. Пройден
10 10 5 20 5000 4500 4000 39 5 2 2 Через 3 дн. все коровы умрут. Пройден

Код на С

Код на Java

 

Решение:

По условию задачи каждый день количество припасов меняется в зависимости от прошлодневного количества. В условии продолжения цикла указано допущение, что сперва еда дается коровам, а после количество ее уменьшается согласно заданным условиям (то есть, на сгнивание, разворовывание и продажу корма может и не хватить).

Допустим, что ежедневно умирает  [latex]p[/latex]% от начального количества коров. Чтобы число коров было целым используем функцию round.

В программе введен счетчик дней, который увеличивается на каждом витке цикла, и по завершении указывает количество дней, на которые хватило припасов.  После цикла путем сравнения определим какой из видов кормов закончится раньше, или проверим не погибнут ли все коровы.

С работой программы на С можно ознакомиться здесь, а на Java здесь.

 

Related Images:

А55

Задача. Даны действительные положительные числа [latex]a, b, c, d[/latex]. Выяснить, можно ли прямоугольник со сторонами [latex]a, b[/latex] уместить внутри прямоугольника со сторонами [latex]c, d [/latex] так, чтобы каждая из сторон одного прямоугольника была параллельна или перпендикулярна каждой из сторон второго прямоугольника.

Тесты:

c d a b Результат Комментарий
4 6 5 5 Нельзя разместить Пройден
4 8 7 3 Можно разместить Пройден
23 45 87 23 Нельзя разместить Пройден
15 33 15 12 Можно разместить Пройден
7 9 7 13 Нельзя разместить Пройден

Код на С

Код на Java

 

Решение: Прямоугольник можно разместить внутри другого если,  стороны меньше соответствующих им параллельным.  Согласно условию существует две различные комбинации размещения прямоугольника. Проверив необходимые неравенства, определим можно или нельзя разместить прямоугольник внутри другого.

Ознакомиться с кодом на С можно здесь, а с кодом на Java здесь.

Related Images:

Ю2.26

Задача. На шахматной доске стоят три ферзя (ферзь бьет по вертикали, горизонтали и диагоналям). Найти те пары из них, которые угрожают друг другу.

[latex]x_{1}[/latex] [latex]y_{1}[/latex] [latex]x_{2}[/latex] [latex]y_{2}[/latex] [latex]x_{3}[/latex] [latex]y_{3}[/latex] Результаты Комментарий
6 8 3 5 6 3 Пара ферзей 1 и 2 угрожают друг другу

Пара ферзей 1 и 3 угрожают друг другу

Пройден
1 5 6 8 7 3 Никто никому не угрожает Пройден
3 3 8 8 7 1 Пара ферзей 1 и 2 угрожают друг другу Пройден
2 8 4 7 7 4 Пара ферзей 2 и 3 угрожают друг другу Пройден

 Тесты:

Код на С

Код на Java

 

Решение:

В случае если фигуры стоят на одной вертикали или горизонтали соответствующие координаты будут равны. Таким образом, проверяя на равенство координаты, узнаем о существовании угрозы. В случае если фигуры стоят на одной диагонали можно заметить, что [latex] \left|x_{1}-x_{2 }\right|=\left|y_{1}-y_{2} \right|[/latex]. Таким образом, проверив и это условие, точно определим есть угроза или нет.

Также надо отметить тот случай, когда не существует никакой угрозы . Для этого введем счетчик [latex]k[/latex]. Если между какой-либо парой фигур есть угроза, то [latex]k[/latex] увеличивается на единицу. Если после проверки вышеупомянутых условий [latex]k[/latex] остается равным нулю, то делаем вывод, что никто никому не угрожает.

 

 

Related Images:

Ю1.24

Задача. Треугольник задается координатами вершин на плоскости: [latex]A(x_{1},y_{1}), B(x_{2},y_{2}), C(x_{3},y_{3})[/latex]. Найти точку пересечения биссектрис [latex] I(x,y)[/latex]  треугольника [latex]ABC[/latex] (центр вписанной в него окружности).

 

Тесты:

 
[latex]x_{1}[/latex] [latex]y_{1}[/latex] [latex]x_{2}[/latex] [latex]y_{2}[/latex] [latex]x_{3}[/latex] [latex]y_{3}[/latex] [latex]x[/latex] [latex]y[/latex] Комментарий
0 4 3 0 0 0 1.00 1.00 Пройден
0 -4 -3 0 0 0 -1.00 -1.00 Пройден
-5 -1 0 -13 -5 -13 -3.00 -11.00 Пройден
1 1 5 1 3 4 3.00 2.07 Пройден

Код на С

Код на Java

Решение:

Для нахождения координат биссектрисы воспользуемся формулами :

[latex]x=\frac{ax_{1}+bx_{2}+cx_{3}}{a+b+c}[/latex],

[latex]y=\frac{ay_{1}+by_{2}+cy_{3}}{a+b+c}[/latex] ,

где [latex] a [/latex]-длина стороны [latex]CB[/latex], [latex]b[/latex]-длина стороны [latex]AC[/latex], [latex]c[/latex]-длина стороны [latex]AB[/latex].

 

Для этого необходимо предварительно найти длины сторон по формуле :

[latex] AB=\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}} [/latex], где [latex] A(x_{1},y_{1}), B(x_{2},y_{2}) [/latex].

Related Images: