кодесурса
«PHP

Упражнения по PHP: вычисление максимального значения суммы передаваемых целых чисел

script1adsense2code
script1adsense3code

PHP: упражнение 75 с решением

Расположите целые числа (от 0 до 99) как узкую вершину холма, как показано на рисунке 1. Чтение таких данных, представляющих огромные, начиная с вершины и продолжая согласно следующему правилу до низа. Напишите программу PHP, которая вычисляет максимальное значение суммы передаваемых целых чисел.

Иллюстрированная презентация:

«PHP:

Входные данные: серия целых чисел, разделенных запятыми, указана в ромбах. В каждой строке нет пробелов. Пример ввода соответствует рисунку 1. Количество строк данных составляет менее 100 строк.

Пример вывода:
Максимальное значение суммы целых чисел, проходящих по правилу на одной строке.

Пример решения: -

PHP-код:

<?php
class Node {
    public $left_part;
    public $right_part;
    public $value;
    public $largest;
 
    public function __construct($value) {
        $this->value = $value;
    }
 
    public function max_value() {
        if ($this->largest !== null) {
            return $this->largest;
        }
        if (is_null($this->left_part) && is_null($this->right_part)) {
            return $this->value;
        }
        $left_part  = is_null($this->left_part)  ? -1 : $this->left_part->max_value();
        $right_part = is_null($this->right_part) ? -1 : $this->right_part->max_value();
 
        return $this->largest = $this->value + max($left_part, $right_part);
    }
}
 
$diamond = array();
 
while ($line = trim(fgets(STDIN))) {
    $diamond[] = explode(',', $line);
}
 
$nodes = array();
for ($i = 0; $i < count($diamond); $i++) {
    for ($j = 0; $j < count($diamond[$i]); $j++) {
        $nodes[$i][$j] = new Node($diamond[$i][$j]);
    }
}
 
for ($i = 0; $i < count($nodes); $i++) {
    for ($j = 0; $j < count($nodes[$i]); $j++) {
        $n = $nodes[$i][$j];
        if ($i < count($diamond)/2 - 1) {
            $n->left_part  = isset($nodes[$i + 1][$j])     ? $nodes[$i + 1][$j]     : null;
            $n->right_part = isset($nodes[$i + 1][$j + 1]) ? $nodes[$i + 1][$j + 1] : null;
        } else {
            $n->left_part  = isset($nodes[$i + 1][$j - 1]) ? $nodes[$i + 1][$j - 1] : null;
            $n->right_part = isset($nodes[$i + 1][$j])     ? $nodes[$i + 1][$j]     : null;
        }
    }
}
 
$top = $nodes[0][0];
 
echo $top->max_value() . "\n";
?>

Пример ввода:
8
4, 9
9, 2, 1
3, 8, 5, 5
5, 6, 3, 7, 6
3, 8, 5, 5
9, 2, 1
4, 9
8

Пример вывода:

 64 

Блок - схема:

«Блок-схема:

Блок - схема:

«Блок-схема:

Редактор кода PHP:

Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

Предыдущий: Напишите программу PHP, чтобы вырезать слова длиной от 3 до 6 символов из данного предложения не более 1024 символов.
Далее: написать программу PHP для печати количества комбинаций.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code