Проблемы с PHP: проблема 3n + 1
Задачи PHP - 1: упражнение 18 с решением
Напишите программу PHP, в которой вы берете любое положительное целое число n, если n четное, разделите его на 2, чтобы получить n / 2. Если n нечетное, умножьте его на 3 и добавьте 1, чтобы получить 3n + 1. Повторяйте процесс до тех пор, пока достичь 1.
Вход: 12
Согласно Википедии, гипотеза Коллатца является гипотезой в математике имени Лотара Коллатца, который впервые предложил ее в 1937 году. Эта гипотеза также известна как гипотеза 3n + 1.
Гипотеза может быть обобщена следующим образом. Возьмите любое положительное целое число n. Если n четное, разделите его на 2, чтобы получить n / 2. Если n нечетное, умножьте его на 3 и добавьте 1, чтобы получить 3n + 1. Повторите процесс (который был назван «Половина или тройной плюс один») бесконечно , Предположение состоит в том, что независимо от того, с какого числа вы начинаете, вы всегда в конечном итоге достигнете 1.
Пример :
Например, начиная с n = 12, получается последовательность 12, 6, 3, 10, 5, 16, 8, 4, 2, 1.
Например, n = 19 занимает больше времени, чтобы достичь 1: 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4. , 2, 1.
Пример решения :
PHP-код:
<?php
function collatz_sequence($x)
{
$num_seq = [$x];
if ($x < 1)
{
return [];
}
while ($x > 1)
{
if ($x % 2 == 0)
{
$x = $x / 2;
}
else
{
$x = 3 * $x + 1;
}
# Added line
array_push($num_seq, $x);
}
return $num_seq;
}
print_r(collatz_sequence(12));
print_r(collatz_sequence(19));
?>
Пример вывода:
массив ( [0] => 12 [1] => 6 [2] => 3 [3] => 10 [4] => 5 [5] => 16 [6] => 8 [7] => 4 [8] => 2 [9] => 1 ) массив ( [0] => 19 [1] => 58 [2] => 29 [3] => 88 [4] => 44 [5] => 22 [6] => 11 [7] => 34 [8] => 17 [9] => 52 [10] => 26 [11] => 13 [12] => 40 [13] => 20 [14] => 10 [15] => 5 [16] => 16 [17] => 8 [18] => 4 [19] => 2 [20] => 1 )
Блок - схема:
Редактор кода PHP:
Внесите свой код и комментарии через Disqus.
Предыдущий: Напишите программу PHP, чтобы вычислить сумму двух обратных чисел и отобразить сумму в обратной форме.
Далее: Напишите программу PHP, чтобы проверить, является ли данное число уродливым числом.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования