我正在用 perl 解决这个微不足道的 spoj 问题。所以我想出了这个解决方案:
while ("0 0 0\n" ne ($string = <STDIN>)) {
my @a = split ' ', $string;
$a1 = $a[0];
$a2 = $a[1];
$a3 = $a[2];
if($a2 - $a1 == $a3 - $a2) {
$c = $a2 - $a1;
$a4 = $a3 + $c;
print("AP ", $a4);
}
else {
$c = $a2 / $a1;
$a4 = $a3 * $c;
print("GP ", $a4);
}
print "\n";
}
令我惊讶的是,它超过了时间限制。当我在 C 中尝试同样的事情时,它以最短的运行时间成功运行。这是 C 版本:
#include <stdio.h>
int main()
{
int a1, a2, a3, a4, c;
while (1) {
scanf("%d %d %d", &a1, &a2, &a3);
if (a1 == 0 && a2 == 0 && a3 == 0) break;
if (a2 - a1 == a3 - a2) {
c = a2 - a1;
a4 = a3 + c;
printf("AP %d\n", a4);
}
else {
c = a2 / a1;
a4 = a3 * c;
printf("GP %d\n", a4);
}
}
return 0;
}
那么,请您告诉我:
当涉及到这个问题时,perl 真的比 C 慢那么多(至少 200 倍)吗?我怀疑这与输入和使用的数组等高级结构有关,或者我的代码中可能存在导致程序停止的错误。