我有一个程序,用于计算客户仓库中两个供应商的最短路径:
$_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,是否有某种闻所未闻的线路限制器需要增加?
答案 0 :(得分:1)
除非达到EOF,否则fgets将返回包含换行符的字符串。我怀疑这是你的问题,因为你永远不会将它转换为整数,也不会剥离换行符。以下任何一种都应该为您解决这个问题:
更改$array[0] . ' ' . $array[0] . "\n"
到((int) $array[0]) . ' ' . $array[0] . "\n"
更改$array = explode(' ', fgets($_fp));
到$array = explode(' ', trim(fgets($_fp)));
答案 1 :(得分:1)
在\n
的字符串末尾看起来有换行符($array[0]
)。
应该打印-10
时,-10\n
中有$array[0]
。
请尝试更换
$array = explode(' ', fgets($_fp));
与
$array = explode(' ', fgets($_fp));
$array = array_map('trim', $array);
删除字符串中的空格,换行符等。