Минимальное и максимальное число из каждой строки в матрице - PullRequest
0 голосов
/ 18 октября 2019

У меня есть матрица, и идея состоит в том, чтобы написать код, который дает максимальное и минимальное число из каждой строки, без какой-либо функции, просто чистая логика. Например:

Максимальное число должно быть: 567, 789, 900, 906, 897

Минимальное число должно быть: 45, 100, 191, 323, 101

[45, 456, 321, 344, 567],
[100, 434, 173, 400, 789],
[191, 211, 457, 809, 900],
[431, 323, 432, 805, 906],
[708, 232, 897, 101, 696]
<code>$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

$rows = 5;
$cols = 5;

$intValue = 1;

$max = $arrNxm[0][0];

for($row = 0; $row < $rows; $row++)
{
  $max = $arrNxm[$row][0];
  for($col = 0; $col < $cols; $col++)
  {
    if($arrNxm[$row][$col] > $max)
    {
      $max = $arrNxm[$row][$col];
    }
  }
}


echo "<pre>";
var_dump($max);
echo "
";

Когда я запускаю свой код, я получаю только одно число и не могу понять, что я должен сделать, чтобы получить правильный вывод.

Ответы [ 4 ]

0 голосов
/ 18 октября 2019

Я хотел бы предложить это

$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];
$max = array();
$min = array();
foreach ($arrNxm as $key) {
    array_push($max, max($key));
    array_push($min, min($key));
}

0 голосов
/ 18 октября 2019

Вот, пожалуйста,

$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

$row = 5;
$col = 5;
$min = $max = array();

for( $i = 0; $i < $row; $i++ ) {
    $min_val = $max_val = $arrNxm[ $i ][0];    
    for( $j = 0; $j < $col; $j++ ) {
        //echo $arrNxm[ $i ][ $j ]." ";
        if( $min_val > $arrNxm[ $i ][ $j ] ) {
            $min_val = $arrNxm[ $i ][ $j ];
        }

        if( $max_val < $arrNxm[ $i ][ $j ] ) {
            $max_val = $arrNxm[ $i ][ $j ];
        }
    }
    // echo $min_val.PHP_EOL;
    $min[] = $min_val;
    $max[] = $max_val;
}
print_r( $min );
print_r( $max );

Вывод:

Array
(
    [0] => 45
    [1] => 100
    [2] => 191
    [3] => 323
    [4] => 101
)
Array
(
    [0] => 567
    [1] => 789
    [2] => 900
    [3] => 906
    [4] => 897
)
0 голосов
/ 18 октября 2019

С 2 циклами по каждому элементу и парой терней, если это

$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

foreach ($arrNxm as $rkey => $row) {
    foreach ( $row as $ckey => $col) {
        // init this row in the results arrays
        if ($ckey == 0) { $min[$rkey] = PHP_INT_MAX; $max[$rkey] = 0; }              

        $min[$rkey] = $min[$rkey] > $col ? $col : $min[$rkey];
        $max[$rkey] = $max[$rkey] < $col ? $col : $max[$rkey];
    }
}

echo 'MAX' . PHP_EOL . print_r($max,1);
echo 'MIN' . PHP_EOL . print_r($min,1);

РЕЗУЛЬТАТ

MAX
Array
(
    [0] => 567
    [1] => 789
    [2] => 900
    [3] => 906
    [4] => 897
)
MIN
Array
(
    [0] => 45
    [1] => 100
    [2] => 191
    [3] => 323
    [4] => 101
)
0 голосов
/ 18 октября 2019

Вы переписываете одну и ту же переменную с максимальным значением для каждой строки. Вот почему в конце у вас всегда будет одно число.

Вместо этого вы должны создать массив для результатов и сохранить максимум для каждой строки в отдельности, например:

$max = [];
for($row = 0; $row < $rows; $row++)
{
  $max[$row] = $arrNxm[$row][0];
  for($col = 0; $col < $cols; $col++)
  {
    if($arrNxm[$row][$col] > $max[$row])
    {
      $max[$row] = $arrNxm[$row][$col];
    }
  }
}
...