>我有一个程序,可以计算客户仓库中两个供应商的最短路线:
$_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 返回一个包含换行符的字符串。我怀疑这是你的问题,因为你从来没有把它转换为整数,也没有去掉换行符。以下任一方法都应为您解决此问题:
-
更改
$array[0] . ' ' . $array[0] . "n"
到((int) $array[0]) . ' ' . $array[0] . "n"
-
更改
$array = explode(' ', fgets($_fp));
到$array = explode(' ', trim(fgets($_fp)));