不必要的新行PHP

时间:2019-05-26 16:01:46

标签: php

我有一个PHP代码。该代码应该打印输出,然后换一行。 该代码工作正常,但我在结尾处添加了不必要的新行。最后应该只有一个换行符,但是我的代码打印了几行。可能是什么问题?请帮忙。

<?php
  /* Read input from STDIN. Print your output to STDOUT*/
  $fp = fopen("php://stdin", "r");
  //Write code here
  $loop = 0;
  $n = 0; $arr = [];
  while(!feof($fp)) {
    $arr = []; $n = 0;
    if($loop == 0) {
      $total = fgets($fp);
    }
    else {
      if($loop%2 == 1) {
        $n = fgets($fp);
      }
      else {
        $arr = fgets($fp);
      }
    }
    if($loop > 0 && $loop%2 == 0) {
      $arr = explode(" ", $arr);
      $m = [];
      for($i = 0; $i < 1<<10; $i++) {
        $m[$i] = -1;
      }
      $n = count($arr);

      $r = 0;
      for($i = 0; $i < 1<<10; $i++) {
        $r = max($r, fd_sum($i, $m, $arr, $n));
      }

      echo $r."\n";
    }

    $loop++;
  }
  fclose($fp);

?>

<?php
  function fd_sum($i, $m, $arr, $n) {
    if($i == 0) {
      return $m[$i] = 0;
    }
    else if($m[$i] != -1) {
      return $m[$i];
    }
    else {
        $rr = 0;
        for($j = 0; $j < $n; $j++) {
          $num = (int)$arr[$j];
          $b = save($num);
          if(($i | $b) == $i) {
              $z = $i^save($num);
              $y = fd_sum($z, $m, $arr, $n);
              $v = ($y + $num);
            $rr = max($v, $rr);
          }

        }
        return $m[$i] = $rr;
    }
  }
?>

<?php
  function save($nm)
  {
    $x = 0;
    for($i = 1; $nm/$i > 0; $i *= 10) {
      $d = ($nm/$i) % 10;
      $x = $x | (1 << $d);
    }
    return $x-1;
  }

?>

我的输入是

3
4
3 5 7 2
5
121 3 333 23 4
7
32 42 52 62 72 82 92

我的输出是

17
458
92
-
-
-
-

预期输出为

17
458
92
-

注意:我用'-'表示新行

我在做什么错?请帮忙。

1 个答案:

答案 0 :(得分:2)

PHP解释器在结束标记后读取新行,然后将其随即吐出作为输出。删除多余的打开/关闭标签应删除多余的新行。

此外,php关闭标签不是必需的,我建议省略它们。

<?php
  /* Read input from STDIN. Print your output to STDOUT*/
  $fp = fopen("php://stdin", "r");
  //Write code here
  $loop = 0;
  $n = 0; $arr = [];
  while(!feof($fp)) {
    $arr = []; $n = 0;
    if($loop == 0) {
      $total = fgets($fp);
    }
    else {
      if($loop%2 == 1) {
        $n = fgets($fp);
      }
      else {
        $arr = fgets($fp);
      }
    }
    if($loop > 0 && $loop%2 == 0) {
      $arr = explode(" ", $arr);
      $m = [];
      for($i = 0; $i < 1<<10; $i++) {
        $m[$i] = -1;
      }
      $n = count($arr);

      $r = 0;
      for($i = 0; $i < 1<<10; $i++) {
        $r = max($r, fd_sum($i, $m, $arr, $n));
      }

      echo $r."\n";
    }

    $loop++;
  }
  fclose($fp);

  function fd_sum($i, $m, $arr, $n) {
    if($i == 0) {
      return $m[$i] = 0;
    }
    else if($m[$i] != -1) {
      return $m[$i];
    }
    else {
        $rr = 0;
        for($j = 0; $j < $n; $j++) {
          $num = (int)$arr[$j];
          $b = save($num);
          if(($i | $b) == $i) {
              $z = $i^save($num);
              $y = fd_sum($z, $m, $arr, $n);
              $v = ($y + $num);
            $rr = max($v, $rr);
          }

        }
        return $m[$i] = $rr;
    }
  }

  function save($nm)
  {
    $x = 0;
    for($i = 1; $nm/$i > 0; $i *= 10) {
      $d = ($nm/$i) % 10;
      $x = $x | (1 << $d);
    }
    return $x-1;
  }