e-olymp 905. Какой треугольник?

Задача 
Определить вид треугольника (равносторонний, равнобедренный, разносторонний) по заданным длинам его сторон.

Входные данные

В единственной строке задано 3 целых числа — длины сторон треугольника. Длины сторон не превышают 100.

Выходные данные

В единственной строке вывести 1, если треугольник равносторонний, 2 если равнобедренный и 3 если разносторонний.

Код

Тесты

Входные данные Выходные данные
1 5 5 5 1
2 4 5 4 2
3 4 5 6 3

Решение

Для решения задачи нам нужно уметь определять виды треугольников. Нам даны равносторонний, равнобедренный и разносторонний треугольники. У равностороннего треугольника все стороны равны, у равнобедренного равны лишь два бедра, а у разностороннего — стороны не равны.

Для начала задаем три переменные а, b и c, которые равны сторонам треугольника. Вводим их произвольно. Для того, чтобы определить какой это треугольник мы задаем параметры :

  1. если [latex]a=b=c[/latex] , то есть все стороны равны, то у нас равносторонний треугольник;
  2. если[latex] a=b [/latex]или [latex]b=c[/latex] или [latex]a=c[/latex] , то есть две из трех сторон треугольника равны, то у нас равнобедренный треугольник;
  3.  если [latex]a\neq b\neq c[/latex] , стороны не равны, то у нас разносторонний треугольник.

Задача взята с сайта.
Переход на страницу с полностью выполненным данным заданием здесь.

Related Images:

e-olymp 107. Компакт-диски

Чистые компакт-диски продают в трёх видах упаковок. Упаковка из 100 дисков стоит 100 грн., из 20 дисков — 30 грн., а один диск стоит 2грн. Какую минимальную сумму нужно истратить для покупки [latex]N[/latex] таких дисков?

Входные данные

Единственное число [latex]N[/latex] — количество дисков. Значение [latex]N[/latex] натуральное, не больше 1000.

Выходные данные

Искомая минимальная сумма в гривнах.

Тесты

Вход Выход
123 136
 130  150
 140  160
 23  36
 132  154
 170  200
 148  176

Код

Решение

Пусть задано число N — количество дисков и цена N таких дисков. Используем if-блок, для того, чтобы вычислить минимальную сумму дисков. Присваиваем 100 дискам целочисленные значения N. Увеличиваем цену 100 дисков. Вводим а — упаковка из 20 дисков. Присваиваем числу а целочисленные значения N. С помощью if-блока увеличиваем цену 20-ти дисков. Вводим b — один диск. Увеличиваем цену одного диска.

Решение принято на сайте e-olymp.com.

Выполнить код программы можно здесь.

Related Images:

А787

Задача

Вернемся к сортам гороха с желтыми (аллель [latex]R[/latex]) и зелеными (аллель [latex]r[/latex]) семядолями ( смотри предыдущую задачу). Были подвергнуты скрещиванию два растения, одно из которых имело зеленые семядоли. В результате скрещивания получили [latex]m[/latex] растений [latex]F_{1}[/latex] (смотри задачу 785) с желтыми семядолями и [latex]n[/latex]- с зелеными [latex]m\geq 0,n\geq 0 [/latex]. Используя законы Менделя, указать наиболее вероятное сочетание аллелей [latex]R[/latex] и [latex]r[/latex] в генотипе второго родителя и в генотипах каждого их растений [latex]F_{1}[/latex]

Ideone

Тесты

input output
3 2 P: rr x RR
F1: RR, Rr, Rr, rr, rr
8 9 P: rr x Rr
F1: Rr, Rr, Rr, Rr, Rr, Rr, Rr, Rr, rr, rr, rr, rr, rr, rr, rr, rr, rr

Решение

Cоздаем функцию для вывода последовательностей. Мы рассматриваем два варианта конечная эта последовательность или к ней будут добавляться еще элементы, соответственно END или NEND. Если последовательность не конечная то после каждого элемента мы выводим запятую с пробелом.  Если же последовательность не конечная, то выполняется перевод на новую строку. У нас дан гомозиготный рецессивный ген и количество потомков с указанием сколько потомков с каким фенотипом (внешнее проявление гена). Следовательно у нас есть несколько вариантов [latex]rr x RR[/latex], тогда все родители будут желтыми, так как каждый потомок получит по половине качества, то есть каждый потомок будет иметь такой ген [latex]Rr[/latex] следовательно он будет желтым. Если же все будут зелеными, то второй предок тоже был [latex]rr[/latex] . Значит у нас получается, что у родителей [latex]rr[/latex] и [latex]rr[/latex] получаются все дети [latex]rr[/latex]. Остается еще два варианта, если у нас нет не зеленых не желтых детей, значит у нас нет потомства, а если же у нас есть и желтые и зеленые дети , то остается только один вариант, что второй родитель был [latex]Rr[/latex], а это значит, что в потомстве все кто желтые [latex]Rr[/latex], а все кто зеленые [latex]rr[/latex]

 

Related Images:

e-olymp 4. Две окружности

Две окружности

Ссылка на засчитанное решение.

Определить количество точек пересечения двух окружностей.
Входные данные

6 чисел x1, y1, r1, x2, y2, r2, где x1, y1, x2, y2 — координаты центров окружностей, а r1, r2 – их радиусы. Все числа — действительные, не превышают по модулю 1000000000, заданы не более чем с 3-мя знаками после запятой.

Выходные данные

Количество точек пересечения. Если точек пересечения бесконечно много, то вывести -1.

Считываем данные, далее если координаты центров и длины радиусов совпадают печатаем: «-1». Затем рассматриваем варианты, когда окружности имеют одну, две общих точки либо не имеют ни одной.

Код на Java:

Код Ideone

Засчитанное решение на e-olimp

Related Images:

А71

Задача.

Дано действительное число [latex]a[/latex]. Вычислить [latex]f(a)[/latex], где [latex]f[/latex] — периодическая функция с периодом 1.5, совпадающая на отрезке [latex][0;1.5][/latex] с функцией [latex]x^{3}-2.25x[/latex].

Тесты:

[latex]a[/latex] [latex]f(a)[/latex] Комментарий
2.12 -1.15667 Тест пройден
-8 -1.25 Тест пройден
11.6 -1.114 Тест пройден
3.7 -1.232 Тест пройден

Код:

Решение:

Для положительных мы просто приравниваем [latex]a[/latex] к остатку от деления числа [latex]a[/latex] на период [latex]p=1.5[/latex], таким образом мы сдвигаем [latex]a[/latex], влево на необходимое количество[latex]p[/latex] пока [latex]a[/latex] не попадет в отрезок [latex][0;1.5][/latex]. Если число [latex]a[/latex] принадлежит отрезку [latex][0;1.5][/latex], то по данному алгоритму число [latex]a[/latex] останется неизменным.

Для отрицательных чисел мы действуем проще. К левой границе(взятой по модулю) интервала в котором находится число [latex]a[/latex] мы прибавляем число [latex]a[/latex]. Таким образом мы сдвигаем число а соответствующему значению в интервале [latex][0;1.5][/latex] так, что значение функции при этом не меняется.
Например:
[latex]a=-2[/latex] , следовательно она принадлежит отрезку [latex][-3;-1.5][/latex].
берем левую границу [latex]\left|-3 \right|[/latex] и прибавляем a.
[latex]3-2=1.[/latex] [latex]f(-2)=f(1)[/latex] т.к. функция периодична.

Полученное значение [latex]a[/latex] подставляем в формулу [latex]f(a)=a^{3}-2.25a[/latex] и подсчитываем значение функции.
Ссылка на код

Related Images:

Ю2.3

Задача: Треугольник задан координатами своих вершин на плоскости:   [latex]A(x_{a}, y_{a})[/latex], [latex]B(x_{b}, y_{b})[/latex], [latex]C(x_{c}, y_{c})[/latex]. Определить, является он прямо-, остро-, или тупоугольным.

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

Тесты:

[latex]x_{A}[/latex] [latex]y_{A}[/latex] [latex]x_{B}[/latex] [latex]y_{B}[/latex] [latex]x_{C}[/latex] [latex]y_{C}[/latex] Результат комментарий
0 1 0 2 0 3 тупоугольный пройден
1 4 3 2 6 2 тупоугольный пройден
6 2 6 2 6 4 прямоугольный пройден
 2 1 2 3 5 3 прямоугольный пройден
5 5 5 5 5 5 невозможно определить  тип треугольника пройден
 2 1 3 4 4 1 остроугольный пройден
 2 1 1 3 4 4 остроугольный пройден

Ссылка на С++ :  http://ideone.com/LfWkbB

Ссылка на Java: http://ideone.com/yrS444

Код:

 

Решение : 

Для начала проверяем такое условие при котором мы не можем определить тип треугольника, если же оно не выполняется , то треугольник прямоугольный

Если не одно из этих условий не выполняется, то мы ищем стороны треугольника и по теореме косинусов находим косинус угла. Далее выполняем три таких условия, при которых определяется какой треугольник : остро- тупо- или прямоугольный

 

 

Related Images:

Какой треугольник?

Задача: 905. Какой треугольник? с сайта http://www.e-olimp.com.ua Определить вид треугольника (равносторонний, равнобедренный, разносторонний) по заданным длинам его сторон. Существование треугольника и корректность исходных данных гарантируется. Технические условия Входные данные В единственной строке задано 3 целых числа — длины сторон треугольника. Длины сторон не превышают 100. Выходные данные В единственной строке вывести 1, если треугольник равносторонний, 2 если равнобедренный и 3 если разносторонний.

Первая сторона Вторая сторона Третья сторона Результат
2 2 2 1
3 4 3 2
4 7 14 3

Код программы:

Задача решена методом моделирования. Вычисления проведены согласно условию, представленному в задаче. По условию задачи необходимо проверить каким является треугольник: равносторонним, равнобедренным или разносторонним. Для этого создаем массив из трех элементов(сторон треугольника), считываем его. Далее, если все элементы массива равны, то треугольник равносторонний, иначе, если две стороны равны, то он равнобедренный, если ни то, ни то не выполняется, то он разносторонний. Для проверки работы программы можно воспользоваться объектом. Ссылка на e-olimp: http://www.e-olymp.com/ru/submissions/2319469 Второй вариант:

http://www.e-olymp.com/ru/submissions/2319474

Код на Java:

Второй вариант:

Related Images:

А59и

Даны действительные числа [latex]x, y[/latex]. Определить, принадлежит ли точка с координатами [latex]x, y[/latex] заштрихованной части плоскости.

А59и

 

Вычислил уравнения прямых по формуле :

[latex]\frac{x-x_{a}}{x_{b}-x_{a}}=\frac{y-y_{a}}{y_{a}-y_{b}}[/latex]

Получил уравнения :

[latex]y=2x+3[/latex], [latex]y=-x[/latex], [latex]y=\frac{x-1}{3}[/latex]

Плоскость разделил на верхнюю и нижнюю части осью ox([latex]y\geq 0[/latex], [latex]y\leq 0[/latex]), при помощи первых двух уравнений выделил заштрихованную область в верхней части, при помощи первого и третьего соответственно в нижней(изменив знак «=» на «≥» или «≤»(в зависимости от того где должна лежать точка для выполнения условия) ).

Тесты:

[latex]x[/latex] [latex]y[/latex] Результат:
-2 -1 Точка входит в заштрихованную область.
-2 -1.001 Точка не входит в заштрихованную область.
-2 -0.999 Точка не входит в заштрихованную область.
-1 1 Точка входит в заштрихованную область.
-1.001 1 Точка не входит в заштрихованную область.
-1 1.001 Точка не входит в заштрихованную область.
-1 0.999 Точка входит в заштрихованную область.
1 0 Точка входит в заштрихованную область.
1 -0.001 Точка не входит в заштрихованную область.

Сам код:

Ссылка на код

 

 

Related Images:

А60е

ЗадачаБезымянный

Пусть [latex]D[/latex] — заштрихованная часть плоскости (рис.) и пусть [latex]u[/latex] определяется по  [latex] x [/latex] и  [latex] y [/latex] следующим образом (запись [latex] (x, y)[/latex] [latex] \in[/latex] [latex]D [/latex] означает, что точка с координатами [latex] x ,y [/latex] принадлежит [latex] D [/latex]).
[latex]u=\left\{\begin{matrix}x+y,&\left(x,y\right)\in D\\x-y,&\left(x,y\right)\notin D\end{matrix}\right.[/latex]
Код C++
Код C++ на Ideone: www.ideone.com/s6vMul

Код Java

Код Java на Ideone: A60e

 Комментарии

 Для всех трех функций необходимо  проверить чтобы заданная ордината была больше [latex]y=x^{2}[/latex]  и одновременно меньше [latex]y=e^{-x}[/latex] , [latex]y=e^{x}[/latex].

Тесты

x y Результат Комментарий
0 0 0 Пройден
0 1 1 Пройден
34 45 -11 Пройден

Related Images:

А59д

Даны действительные числа [latex]x[/latex], [latex]y[/latex]. Определить, принадлежит ли точка с координатами [latex]x[/latex], [latex]y[/latex] заштрихованной части плоскости.

cpp

Тесты:

KX KY ПРИНАДЛЕЖИТ?
1 1 нет
0 0 да
0.5 0 да
0.25 0.5 да
-0.25 1.5 нет
Ссылка на код: http://ideone.com/R3DlCS
Ссылка на код: ссылка

Ход решения:

Зададим функцией [latex]f\left({x}\right)[/latex] уравнение прямой для двух точек с координатами[latex]\left(x_{0} ; y_{0}\right)[/latex] и [latex]\left(x_{1} ; y_{1}\right)[/latex], которое имеет вид:  [latex]\left( x — x_{0}\right)\cdot\left( y_{1} — y_{0}\right) — \left( y-y_{0}\right)\cdot\left( x_{1} — x_{0}\right) = 0[/latex]

Подставим нужную нам точку в уравнение каждой прямой. Если значение положительное, то точка находится со внутренней стороны. На самом деле в двух четвертях значение будет отрицательное, но для удобства я сделал так, чтобы они были тоже положительны (отнимая вершины наоборот в тех четвертях, где значение отрицательное). То есть,  если  значение во всех 4 случаях будут положительные, либо [latex]= 0[/latex] (Значение [latex]0[/latex] означает что наша точка лежит на прямой, а следовательно принадлежит фигуре)  мы можем утверждать что точка находится в  заштрихованной плоскости. В противном случае она находится вне неё.

 

Related Images:

А36

Задача: Даны действительные числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex]Проверить, выполняются ли неравенства  [latex]a<b<c[/latex].

Тесты:

Ввод Вывод Результат
a b c неравенство                     не выполнено
2 1 3 b<=a<c: нер-во a<b<c                 не выполняется неравенство                     не выполнено
1 3 2 a<=c<=b: нер-во a<b<c                 не выполняется неравенство                     не выполнено
3 1 2 b<=c<=a: нер-во a<b<c                 не выполняется неравенство                     не выполнено
3 2 1 c<=b<=a: нер-во a<b<c                 не выполняется неравенство                     не выполнено
2 3 1 c<=a<b: нер-во a<b<c                 не выполняется неравенство                     не выполнено
1 2 3 нер-во a<b<c справедливо неравенство выполнено

Код программы:

Отчет:

После ввода чисел a, b, c программа проверит их соотношения. Ввиду наличия трех сравниваемых чисел имеем 3! = 6 возможных комбинаций чисел, и только одна из них соответствует требованию. Если неравенство [latex]a<b<c[/latex] имеет место быть, то программа сообщит о его выполнении. В противном же случае консоль выдаст ответ о не выполненном неравенстве, предварительно сообщив причину.

Копия кода на сайте Ideone: ideone.com/aYmMJ2

Related Images:

А48

Задача:

Даны действительные числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] ([latex]a[/latex]≠0). Выяснить, имеет ли уравнение [latex]ax^2 + bx + c = 0[/latex]  действительные корни. Если корни имеются, то найти их. В противном случае ответом должно служить сообщение, что корней нет.

Тесты:

Ввод: Вывод: Результат
a b c
0 *ввод не доступен* *ввод не доступен* неверный ввод Нарушено первоначальное условие, дальнейший ввод не доступен
1 -3 2 уравнение имеет два действительных корня:x1=1.00×2=2.00 уравнение обладает двумя действительными корнями, которые были найдены
9 54 81 уравнение имеет один действительный корень:x0=-3.00 уравнение обладает единственным действительным корнем, который был найден
3 11 19 уравнение не имеет действительных корней корни уравнения отсутствуют
 4  21  24 уравнение имеет два действительных корня:x1=-6.73×2=-14.27 уравнение обладает двумя действительными корнями, которые были найдены
 -2 -3.7 5 уравнение имеет два действительных корня:x1=5.51×2=-1.81 уравнение обладает двумя действительными корнями, которые были найдены

Код программы:

 

Отчёт:

В случае, если параметр не равен нулю, программа позволяет ввести последующие параметр b и константу c. После этого программа ищет дискриминант D по формуле [latex]b^2-4ac[/latex]. Если дискриминант меньше нуля, то программа выдаст сообщение об отсутствии действительных корней в уравнении. Если же дискриминант равен нулю, тогда получим сообщение о наличии единственного корня  уравнения x0, который будет посчитан по формуле [latex]\frac{-b}{2a}[/latex]. В случае, когда дискриминант больше нуля, программа сообщит, что у уравнения есть два действительных корня, после чего будет посчитан корень от дискриминанта d для удобства нахождения первого корня x1: [latex]\frac{-b+d}{2a}[/latex], а затем второго x2: [latex]\frac{-b-d}{2a}[/latex]. Оба корня будут выведены на экран.

Ссылка на дубликат кода в Ideone: http://ideone.com/ZQv9AS

Related Images:

Ю2.25

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

[latex]x _{1}, y_{1}[/latex]- координаты слона.

[latex]x _{2}, y_{2}[/latex]- координаты ладьи.

[latex]x _{3}, y_{3}[/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]  Предполагаемый результат  Комментарий
 1  1  2  2  4  4  Ладья перекрывает шаг от слона.  Тест пройден
 4  5  2  5  5  5  Слон перекрывает шаг от ладьи.  Тест пройден
 1  1  4  5  5  5  Короля атакует и слон и ладья.  Тест пройден
 5  1  4  5  5  5  Ладья атакует короля.  Тест пройден
 5  1  5  3  5  5  Ладья атакует короля.  Тест пройден
 3  1  4  2  5  3   Ладья перекрывает шаг от слона.  Тест пройден
 4  2  3  1  5  3  Слон объявляет шаг королю.  Тест пройден
 1  4  5  3  2  2  Короля не атакует никакая фигура.  Тест пройден

Исходный код программы:

Описание:

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

Алгоритм:

  1.  Объявляем переменные и вводим их значения.
  2. Проверка условий.
    1. Проверка правильности ввода (не совпадают  координаты фигур).
    2. Проверка условия №1.  Проверяем, может ли короля хоть кто-то атаковать. Т. е. стоят ли ладья и король на одной горизонтальной или вертикальной линии или стоит ли король на одной диагонали со слоном.
    3. Проверка условия №2. Проверяем отдельно ладью. Если какая-то координата у ладьи и короля совпадает, то проверяем, находится ли слон между ними. Вывод результата.
    4. Проверка условия №1. Проверка слона, если король и слон расположены на одной диагонали, то проверяем, находится ли ладья между ними. Вывод результата.
  3. Окончание работы.

Ссылка на Ideone.

Related Images:

А38

Задача. Даны действительные числа [latex]x[/latex], [latex]y[/latex]. Вычислить [latex]z[/latex]:

[latex]z=\begin{cases} x-y & \text{ if } x > y \\ y-x+1 & \text{ if } x \leq y \end{cases}[/latex]
x y z Комментарий
18 85 68 Тест пройден
5 4 1 Тест пройден
-16 83 100 Тест пройден
16 16 1 Тест пройден

Код программы:

 

Задача выполняется в три этапа:

1.Ввод значений [latex]x[/latex] и [latex]y[/latex]

2. Сравнение значений [latex]x[/latex] и [latex]y[/latex] для выбора решения задачи согласно с условием.

3.Вывод значения  [latex]z[/latex].

Для выполнения программы и проверки тестов вы можете воспользоваться этой ссылкой

Related Images:

А60д

Задача.

Пусть D — заштрихованная часть плоскости и пусть u определяется по и y следующим образом :

[latex]u=\begin{cases} \sqrt{|x^{2}-1|} & \text{ if } (x, y)\epsilon D \\ x+y & \end{cases}[/latex]

Даны действительные числа x и y. Определить u.
1

Тесты.

Ввод Вывод
x y u
0 0 1
0 0.5 1
-0.3 0.6 0.953939
0.3 0.6 0.953939
-0.2 -0.1 -0.3
0.8 0.6 1.4
0.5 -0.5 0

 

 

 

Решение.

Через переменные x, y обозначим координаты точки.

Мы имеем 3 графика функций:

  1. [latex]y=-x[/latex]
  2. [latex]y=x[/latex]
  3. [latex]x^{2}+y^{2}=1[/latex]

 

Проверяем находится ли точка в заштрихованной области. Точка обязательно должна находиться над или на оси x. 

Если точка принадлежит данной области то для расчёта используем формулу:

[latex]\sqrt{|x^{2}-1|}[/latex]

В противном случае формулу:

[latex]u=x+y[/latex]

 

Related Images:

А59а

Задача:

Даны действительные числа [latex]x[/latex], [latex]y[/latex]. Определить, принадлежит ли точка с координатами  [latex]x[/latex], [latex]y[/latex] заштрихованной части плоскости.

Снимок

 

x y x*x+y*y r Результат Комментарий
1 1 2 1 Не принадлежит Пройден
0 0 0 1 Принадлежит Пройден
0,5 0,3  0,34 1  Принадлежит  Пройден

 

 

Решение:

Уравнение окружности задается формулой: [latex]\left(x-x_{0} \right)^{2}+\left(y-y_{0} \right)^{2}=r^{2}[/latex].

Так как у нас единичный круг, то [latex]r=1[/latex] и уравнение окружности можно записать следующим образом: [latex]x^{2}+y^{2}=r[/latex].

Что бы точка принадлежала окружности, нужно чтоб выполнялось условие [latex]x^{2}+y^{2}\leq r[/latex].

Если же [latex]x^{2}+y^{2}>r[/latex], то точка не будет принадлежать заштрихованной части.

Работу программы можно посмотреть тут.

 

 

Related Images:

Ю2.5

Четырёхугольник ABCD задан координатами своих вершин на плоскости: A([latex]x_{a}[/latex],[latex]y_{a}[/latex]), B([latex]x_{b}[/latex],[latex]y_{b}[/latex]), C([latex]x_{c}[/latex],[latex]y_{c}[/latex]), D([latex]x_{d}[/latex],[latex]y_{d}[/latex]). Проверить, является ли он выпуклым.

Тесты:

Точки Координаты (x,y) Вердикт
A,B,C,D (1,1),(3,3),(5,2),(2,0) Выпуклый
A,B,C,D (-2,1),(2,2),(3,-1),(3,-1) Выпуклый
A,B,C,D (1,0),(1,3),(2,1),(5,0) Не выпуклый
A,B,C,D (-1,3),(0,0),(4,2),(-1,-3) Не выпуклый

Код программы:

Ссылка на код http://ideone.com/dsWBJc

Ссылка на код: ссылка

Ход решения:

Задаем уравнение прямой ([latex]\frac{x-x_{0}}{x_{1}-x_{0}}-\frac{y-y_{0}}{y_{1}-y_{0}}[/latex]). Преобразовываем его к виду без деления (чтобы не было проблем с делением на нуль) [latex](x-x_{0})*(y_{1}-y_{0})-(y-y_{0})*(x_{1}-x_{0})[/latex].

Для каждой стороны (AB,BC,CD,AD):

1. Строим уравнение прямой через эти две вершины.

2. Подставляем в формулу координаты остальных вершин.

3.Сравниваем значения вершин. Если их знаки разные — четырёхугольник не выпуклый.

Если для всех сторон данные условия выполнены — четырёхугольник является выпуклым.

Related Images:

А59з

Задача. Даны действительные числа [latex]x, y[/latex]. Определить, принадлежит ли точка с координатам [latex]x, y[/latex] заштрихованной части плоскости (рис. ниже).

ыфв

Объявляем две переменные [latex]x,y[/latex] типа [latex]double[/latex] (точки могут иметь дробные координаты). Читаем координаты точки. В условии проверяем три пункта:

  1. Лежит ли [latex]y[/latex] выше [latex]-2[/latex] [latex](y>=-2)[/latex].
  2. Находится ли точка между двумя прямыми [latex](|x|<=1)[/latex].
  3. Лежит ли точка ниже диагоналей,описанных функцией [latex]y=|x|[/latex].

Если все эти три условия соблюдены, то точка находится в закрашенной области, иначе вне этой области.

Реализация на Java:

 

 

Related Images:

e-olymp 3. Спичечная модель

Спичечная модель

Спичечная модель с http://www.e-olimp.com.ua/problems/3

Задача.

Профессор Самоделкин решил изготовить объемную модель кубиков из спичек, используя спички для рёбер кубиков. Длина ребра каждого кубика равна одной спичке.

Для построения модели трех кубиков он использовал [latex]28[/latex] спичек.

Какое наименьшее количество спичек нужно Самоделкину для построения модели из N кубиков?

Все числа в задаче не превышают [latex]2*10^9[/latex].

Технические условия

Входные данные

Одно число [latex] N [/latex] – количество кубиков.

Выходные данные

Одно число – количество спичек.

 

Ссылка на саму задачу.

Пройденные тесты программы.

Input Output Comments
0 0 Смотрим,что выдает при  0 кубов
3 28 Проверяем пример данный в задаче
[latex]2*10^9[/latex] 6.00953Е9 Не вылезает ли за рамки переменных

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

Для лучшего понимания сколько нам понадобится спичек, рекомендую представить на бумаге как будут выглядеть «этажи» нашего куба.

Первый этаж будет выглядеть так. (Для примера берем куб [latex]444[/latex], т.к. он самый наглядный и не громоздкий)

8 5 5 5
8 5 5 5
8 5 5 5
12 8 8 8

Для построения самого первого куба нам понадобится 12 спичек, для достройки к нему второго и третьего понадобится по 8, для достройки четвертого куба уже понадобится 5 и так далее.

Второй этаж будет выглядеть так. (аналогично для последующих)

5 3 3 3
5 3 3 3
5 3 3 3
8 5 5 5

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

Получаем [latex]8i+4+5i(i-1)2+3(i-1)2+3i(i-1)^2+2(i-1)^2[/latex] (Где i — это «размерность» куба. К примеру: подставив i=4, мы найдем необходимое количество спичек для построение куба [latex]44*4[/latex]).

Теперь возник вопрос, как в задаче определить размерность куба? Очень просто. Максимальное количество возможных кубов равно [latex]i^3[/latex], следовательно зная количество кубов (Дано в начале задачи) можно определить [latex]i[/latex]. Описываем цикл, увеличивающий [latex]i[/latex] пока [latex]i^3<n[/latex].

Задаем функцию с тремя параметрами. ([latex]u[/latex] — определяет, в какую степень возводить)

Имея размерность, можно узнать, сколько нам надо спичек для построения куба прошлой размерности по формуле. Следовательно мы знаем, сколько кубов принадлежит размерности [latex]i[/latex] ([latex]p=n-i^3[/latex]). Разобьем на этапы построение куба размерности [latex]i[/latex] из куба размерности [latex]i-1[/latex]. Пример:

Имея куб [latex]333[/latex] мы начнем достраивать к нему боковую стенку, потом заднюю, и в самом конце так называемую «крышу».

При построении боковой стены мы получаем куб равный [latex] 433[/latex](увеличилась его длинна).

Вид сверху:

[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]

При построении задней стены он расшириться в ширине [latex]443[/latex].

[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]

На третьем этапе увеличиться высота куба. Следовательно куб будет иметь такую форму [latex]444[/latex].

Определяем  этап. Если мы находимся на третьем этапе, то разность между количеством кубов([latex]n[/latex]) и количеством кубов нашей размерности без крыши([latex]i^2(i-1)[/latex] должно быть больше нуля — [latex]n-i^2(i-1)>0[/latex]. Если больше нуля, то переходим к третьем этапу, иначе смотрим, не на первом ли мы этапе случайно? Для этого количество кубов([latex]n[/latex]) должно быть меньше или равно количеству кубов на первом этапе нашей размерности([latex]i(i-1)(i-1)[/latex]) — [latex]i(i-1)(i-1)>=n[/latex]. Если это выполняется, то переходим к первому этапу, иначе ко второму этапу.

Этап определён. Осталось придумать самый экономный способом построения оставшихся кубов. (В этом и заключается подвох задачи) Самый экономный способ, это если мы будем строить боковую стенку (заднюю или «крышу») в такой последовательности:

16 15 14 13
9 8 7 12
4 3 6 11
1 2 5 10

В количестве затраченных спичек выглядит вот так:

3 3 3 5
3 3 5 3
3 5 3 3
8 5 5 5

По диагонали и по основанию мы тратим по 5 спичек, остальные кубы требуют  по 3 (для построения первого куба необходимо 8 спичек). Можно заметить, что номера кубов, для построения которых надо 5 спичек, имеют зависимость, которую можно использовать. По размерности боковой плоскости можно определить количество спичек необходимых для построения плоскости прошлой размерности по формуле [latex]8+(g-2)25+3((g-1)(g-1)-1-(g-2)2)[/latex]. Формула при размерности 1 выдаст неправильный ответ, по этому ставим условие, если [latex]g=1[/latex], то результат увеличиваем на 8, иначе на всю эту формулу. После этого у нас осталость некое количество кубов. Запускаем цикл от номера последнего элемента нашей прошлой разрмерности latex(g-1)+i<=p[/latex].

Разобравшись во всех нюансах задачи, приступаем к напсианию кода.

Ссылка на программу

Related Images:

А161

Задача: Даны натуральное число n, действительные числа [latex]a_{1},…,a_{n}[/latex], получить [latex]b_{1},…,b_{n}[/latex], где [latex]b_{i}= \frac{a_{i}}{1 + (a_{1} +… + a_{i})^{2}}[/latex], [latex]i = 1,…, n[/latex].

[latex]n[/latex] [latex]a[/latex] [latex]b[/latex]
7 1 2 3 4 5 6 7 0.500 0.200 0.081 0.040 0.022 0.014 0.009
10 4.5 3.1 6.7 1.1 8.9 4.32 1.45 5.1 4.5 8.1 0.212 0.053 0.033 0.005 0.015 0.005 0.002 0.004 0.003 0.004
Создаем цикл от i до заданного n. В нем каждый раз читаем [latex]a[/latex] и по формуле получаем [latex]b[/latex]. В конце цикла запоминаем [latex]a_{n}[/latex] для вычисления  суммы [latex]a_{1}+…+a_{i}[/latex]. Если цикл дошел до конца файла то прерываем его.

Код программы на Java:

 

Ideone.

Related Images: