Недавно я практиковал много алгоритмов для интервью. Мне было интересно, есть ли другой способ решить эту проблему. Я написал это таким образом, что только положительно увеличиваю его, потому что из базовой математики я знаю, что два отрицательных числа, умноженные друг на друга, приведут к положительному числу, поэтому мне просто нужно сделать целое число, которое удовлетворяет условию, отрицательным.
Есть ли способ написать это элегантно где у вас не было знания умножения двух отрицательных чисел на положительный результат?
<?php
# Z = {integers}
# B = {x:x, x is an element of Z, x^2 + 1 = 10}
$numNotFound = true;
$x = 0;
$b = [];
while ($numNotFound) {
if ($x*$x + 1 == 10) {
array_push($b, $x, $x*-1);
$numNotFound = false;
}
$x++;
}
echo json_encode($b); #[3, -3]
обновленный
Это решение не использует тот факт, что -1 * -1 = 1. Оно выведет первое найденное число в качестве первого элемента в массиве. Если x = -3, то [-3,3] или если x = 3 [3, -3].
$numNotFound = TRUE;
$x = 0;
$b = [];
Do{
if ((pow($x, 2) + 1) === 10) {
array_push($b, $x, 0 - $x);
$numNotFound = FALSE;
}
$x++;
}while($numNotFound);
echo json_encode($b); //[3, -3]
Других решений пока нет …