Задача взята с сайта e-olymp.com.
Условие
Школьники, идя из дому в школу или наоборот – со школы домой, любят кушать конфеты. Но, как всегда, это приятное дело иногда имеет неприятные последствия – детки часто выбрасывают обертки на школьном дворе.
Мурзик всегда следил за чистотой школьного двора и ему в этом с радостью помогали бабочки, благодарные за прекрасные фотографии, сделанные им. Бабочки могли использовать собственные крылышки как линзы, причем они могли изменять их фокусное расстояние. Заметив обертку от конфетки, лежавшую на школьном дворе в точке с координатами ,
, бабочка перелетала в точку с координатами
,
,
, расположенную на пути солнечных лучей к обертке и, изменяя фокусное расстояние своих крылышек-линз, сжигали обертку от конфеты.
Какую оптическую силу имели крылышки-линзы бабочки в этот момент?
Входные данные:
В первой строке 2 числа: координаты ,
, обертки от конфетки. Во второй – 3 числа: координаты
,
,
бабочки в момент сжигания обертки.
Все входные данные — целые числа, не превышающие по модулю 1000.
Выходные данные:
Единственное число – оптическая сила крылышек-линз , вычисленная с точностью до 3-х знаков после запятой по правилам математических округлений.
Тесты:
10 | 20 | 10 | 20 | 100 | 0.010 |
10 | 30 | 10 | 30 | 50 | 0.020 |
10 | 30 | 20 | 40 | 110 | 0.009 |
Код на Haxe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
class Test { public var x1:Int; public var y1:Int; public var x2:Int; public var y2:Int; public var z2:Int; public function new(x1, y1, x2, y2, z2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.z2 = z2; } static function main() { var tests = new Array(); tests.push(new Test(10, 20, 10, 20, 100)); tests.push(new Test(10, 30, 10, 30, 60)); tests.push(new Test(10, 30, 20, 40, 110)); var D:Float; for (i in 0...3) { var x1:Int = tests[i].x1; var y1:Int = tests[i].y1; var x2:Int = tests[i].x2; var y2:Int = tests[i].y2; var z2:Int = tests[i].z2; D = 1/Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+z2*z2); trace(D); } } } |
Ход решения:
Вычисляем оптическую силу линзы по формуле
, где
– расстояние между бабочкой и обёрткой. вычисляем его по формуле:
=
. Вычисление в одну строку:
28 |
D = 1/Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+z2*z2); |
Далее выводим на экран:
29 |
trace(D); |
Примечание: Входные данные для тестирования были заданы программно из-за определенных затруднений при использовании стандартного ввода.
Ссылки:
Рабочий код для тестирования на try.haxe.org: Try Haxe !
- e-olimp 3966. An ardent collector of butterflies - 13.06.2017
- e-olymp 1078. The line degree - 12.06.2017
- A704 - 11.06.2017
— Зачем заводить два класса? Не проще так?
Исправил, хотя мне кажется, что при таком варианте можно слегка запутаться.
Ну, преподаватели люди капризные.
Почти как тимлиды 🙂