莫名其妙的回声函数格式化



>我有一个程序,可以计算客户仓库中两个供应商的最短路线:

$_fp = fopen("php://stdin", "r");
$tcase = fgets($_fp);
for ($a0 = 0; $a0 < $tcase; $a0++)
{            
    $count = fgets($_fp);
    $array = explode(' ', fgets($_fp));
    $max_ending_here = 0;
    $max_so_far = 0;
    $all_positives = 0;
    for($i=0; $i < count($array); $i++)
    {
        $x = $array[$i];
        $max_ending_here = max(0, $max_ending_here + $x);
        $max_so_far = max($max_so_far, $max_ending_here);

        if ($array[$i] >= 0) {
            $all_positives = $all_positives + $array[$i];
        }
    }
    if ($max_so_far > 0) {
        echo $max_so_far . ' ' . $all_positives . "n";
    } else {
        echo $array[0] . ' ' . $array[0] . "n";
    }
}
?>

当我放入标准输入时,我在输出上遇到意外的格式错误,其中两个负数不在同一行上。这发生在最后的else {echo $array[0] . ' ' . $array[0] . "n";}。我已经尝试了我能想到的一切,但我仍然得到一些看起来像:

1 1
-1 -1
1 1
6 6
-10
 -10
5 6

问题是两个-10,是否有某种闻所未闻的线路限制器需要增加?

看起来在

$array[0] 的字符串末尾有一个换行符 ( n )。

当应该打印-10时,$array[0]中有-10n.

请尝试更换

$array = explode(' ', fgets($_fp));

$array = explode(' ', fgets($_fp));
$array = array_map('trim', $array);

删除字符串中的空格、换行符等。

除非达到 EOF,否则 fgets 返回一个包含换行符的字符串。我怀疑这是你的问题,因为你从来没有把它转换为整数,也没有去掉换行符。以下任一方法都应为您解决此问题:

  1. 更改$array[0] . ' ' . $array[0] . "n"
    ((int) $array[0]) . ' ' . $array[0] . "n"

  2. 更改$array = explode(' ', fgets($_fp));
    $array = explode(' ', trim(fgets($_fp)));

最新更新