相同的算法在C和PHP中的运行方式不同

时间:2015-09-23 19:19:26

标签: php c

我在CodeChef.com上练习了一个问题。

https://www.codechef.com/problems/CHOPRT - >链接到我正在解决的问题。

我用C.成功地解决了这个问题。

我的C代码:

#include <stdio.h>

int main() {

    int t;
    int num1;
    int num2;


    scanf("%d", &t);

    while(t--) {

        scanf("%d %d", &num1, &num2);
        if(num1 > num2)
            printf(">");
        else if(num1 < num2)
            printf("<");
        else
            printf("=");
        printf("\n");           
    }

    return 0;
}  

但是我无法使用PHP解决它:

我的PHP代码:

<?php

    $t = intval(fgets(STDIN));

    while($t--) {

        $line = split(" ", trim(fgets(STDIN)));
        $num1 = intval($line[0]);
        $num2 = intval($line[1]);

        if($num1 < $num2)
            print("<");
        else if($num1 > $num2)
            print(">");
        else
            print("="); 
        print("\n");        
    }
?>  

尽管这两个程序在我的MacBook Pro上运行完美,但PHP代码不能在codechef.com上运行并且提供WA(错误的答案)。 C代码运行完美,并且在0.00秒内运行。

请告诉我两个相应代码之间的区别,我个人认为,这些代码应该是相同的,并且也会产生相同的输出。

1 个答案:

答案 0 :(得分:3)

我经常听到一些测试用例是错误的。我有一个角落案例,可以为您的C代码提供完美的结果,但不会为您的PHP提供

这样做:

1
10  10 

请注意,两位数之间有多个空格。

我测试了它here。 而不是预期的输出:

=

你的输出是:

>

虽然C会通过此测试用例,因为scanf会搜索您输入的下一个整数,但PHP会失败,因为有多个空格。 为了使它在PHP中工作,我确实建议你以这样的方式编码,即两个数字之间的空格不会影响你的预期输出。

这是我相信你的PHP代码无法工作的唯一方式。如果这确实是问题,那不是你的错!