Читайте также:
|
|
100.0
266.6666666666667
148.0487804878049
РЕШЕНИЕ
За 200 часов работник получит t = p 1 * 200 долларов. Если эта сумма больше salary, то достаточно работать salary / p 1 часов. Иначе следует отработать 200 часов с зарплатой p 1 долларов в час, а остальное время с зарплатой p 2 долларов в час. При этом количество часов, когда зарплата будет составлять p 2 долларов в час, равна (salary – t) / p 2.
#include < stdio.h >
class SalaryCalculator
{
public:
double calcHours(int p1, int p2, int salary)
{
int t = p1 * 200;
if (t >= salary) return 1.0 * salary / p1;
return 200 + 1.0 * (salary - t) / p2;
}
};
Для тестирования функции calcHours следует написать функцию main.
void main(void)
{
SalaryCalculator s;
double res = s.calcHours(82,8,12140);
printf("%lf\n",res);
}
Убежать из прямоугольника (EscapeFromRectangle)
Вы находитесь в точке (x, y) внутри прямоугольника, нижний левый угол которого имеет координаты (0, 0), а правый верхний (w, h). Найти наименьшее расстояние, которое Вам следует преодолеть чтобы достичь границы прямоугольника.
Класс: EscapeFromRectangle
Метод: int shortest(int x, int y, int w, int h)
Ограничения: 2 ≤ w, h ≤ 1000, 1 ≤ x ≤ w-1, 1 ≤ y ≤ h-1.
Вход. Целочисленные координаты Вашего положения (x, y) и правой верхней вершины прямоугольника (w, h).
Выход. Наименьшее расстояние, которое следует преодолеть для достижения границы прямоугольника.
Пример входа
x | y | w | h |
Пример выхода
РЕШЕНИЕ
Находим расстояния от точки (x, y) до всех четырех сторон прямоугольника, которые соответственно равны x, y, w – x, h – y. Возвращаем наименьшее из этих значений.
#include < stdio.h >
class EscapeFromRectangle
{
public:
int shortest(int x, int y, int w, int h)
{
int res = x;
if (y < res) res = y;
if (w - x < res) res = w - x;
if (h - y < res) res = h - y;
return res; } };
Наибольший прямоугольник (BiggestRectangleEasy)
У Джона есть n спичек, каждая из которых имеет длину 1. Он хочет составить из них прямоугольник наибольшей площади. Ломать спички нельзя. Джону не обязательно использовать все спички.
Класс: BiggestRectangleEasy
Метод: int findArea(int n)
Ограничения: 4 ≤ n ≤ 10000.
Вход. Количество спичек n, которое имеется в наличии у Джона.
Пример входа n |
Выход. Наибольшая площадь прямоугольника, который может составить Джон при помощи имеющихся у него спичек.
Пример выхода 6 1 3288782
РЕШЕНИЕ
Если одна из сторон прямоугольника равна x, то другую можно найти по формуле:
y = (n – 2* x) / 2
Площадь полученного прямоугольника равна S(x) = x * (n – 2* x) / 2. Она будет наибольшей в такой точке x, в которой S’(x) = 0. Имеем: S’(x) = (n – 4* x) / 2 = 0, x = n / 4. То есть искомым прямоугольником будет квадрат.
Если n не делится на 4, то выполняя целочисленные деления, получим правильный результат.
#include < stdio.h >
class BiggestRectangleEasy
{
public:
int findArea(int n)
{
int x = n / 4;
int y = (n - 2 * x) / 2;
x | y | x=y | x | y | x y | |
return x * y; } };
Дата добавления: 2015-11-14; просмотров: 23 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Методы класса | | | Теоретическая часть |