Задача. Даны действительные числа $a_{1}, a_{2},\ldots$. Известно, что $a_{1} > 0$ и что среди $a_{2}, a_{3}, \ldots$ есть хотя бы одно отрицательное число. Пусть $a_{1},\ldots,a_{n}$ – члены данной последовательности, предшествующие первому отрицательному члену ($n$ заранее неизвестно). Получить: $\left | a_{1}-a_{n} \right |$.
Тесты
Введённые данные. | $\left | a_{1}-a_{n} \right |$ | Комментарий. |
1 2 6 4 -8 0 6 8 -7 | 3 | Пройден. |
0,65 3,2 4 0 -3 2 | 0,65 | Пройден. |
0 -5 8 9 | 0 | Пройден. |
0,8 3 6 9 7,2 0 4 -2 | 3,2 | Пройден. |
1 -3 6 | 0 | Пройден. |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Test { static function main() { var a:Float; // a - первый член последовательности, который мы должны запомнить. var b0:Float; //b0 и b1 последующие члены соответственно. var b1:Float; var sequence = [2, 6, 4, -8, 0, 6, 8, -7];//тестовая последовательность a = 1; b0 = a; for (i in 0...sequence.length) { b1 = sequence[i]; if (b1 < 0) break; b0 = b1; } trace(Math.abs(a - b0)); } } |
Так как в данной формуле присутствует первый член последовательности, который, согласно условию, всегда больше 0, он был вынесен из общего ряда, поэтому его ввод осуществляется вне цикла.
Затем нужно было найти n-ый член последовательности. Для этого было создано 2 переменные, в одной из которых хранится настоящее значение n-ого члена независимо от его знака. Если этот член — число не отрицательное, то вспомогательной переменной присваивается его значение и цикл повторяется вновь. Если же условие неравенства не выполняется, то цикл заканчивается, и у нас остаётся значение нашей вспомогательной переменной (не отрицательное).
В том случае, если первый член последовательности является в то же время и n-ым, $a_{n}$ и вспомогательной переменной присваивается значение $a_{1}$. И в этом случае модуль разницы будет равен 0.
После программа выводит модуль $\left | a_{1}-a_{n} \right |$.
Ссылка на условие задания: cpp.mazurok.com
Try Haxe