1
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int test, l , b, sqr, area, sqra, num;
    fscanf(stdin, "%d", &test);
    while(test--) {
        fscanf(stdin, "%d %d", &l, &b);    //input:
        area = l * b;                      //2
        sqr = sqrt(area);                  //2 2
        sqra = sqr * sqr;                  //7 9
        while(sqr) {
            if(!(area % sqra)) {
                num = area / sqra;
                --sqr;
                break;
            }
        } 
        fprintf(stdout, "%d\n", num);
    }
    return 0;
}

我的代码在 test >= 2 时不起作用。我认为问题出在 fscanf 上。你能解释这是为什么吗?

4

3 回答 3

3

我认为它与 scanf 无关,例如:如果 l=2 和 b=3 然后 area=6,sqrt(area) 是 int 所以它被四舍五入到 2,然后 sqra=4,area%sqra然后是 6%4=2,所以它永远不会进入创建无限循环的循环中的条件。

您的示例中的第二个输入也是如此:7*9=63 => sqr=7 => sqra = 49 => area%sqra=14。再次,无限循环。

于 2013-06-03T18:10:40.137 回答
1

你真的应该使用scanf,而不是fscanf,而且,你在哪里声明了num?我很惊讶它完全可以编译。此外,如果您的面积不能被 sqra 整除,则会出现无限循环。(例如边 3 和 7 的矩形)

于 2013-06-03T18:06:45.630 回答
1

[在声明 num 之后] 您的 fscanf 工作正常:

    fscanf(stdin, "%d %d", &l, &b);
    printf("inp: %d %d\n",l,b);

尝试打印用户输入。有用。您的代码逻辑错误,因此只有您没有得到预期的结果。

于 2013-06-03T18:11:31.210 回答