因此,我正在研究hackerRank挑战,其中输入为一块面包的L和B,输出应为我可以得到的完美正方形切片的数量(无残差)。


  Martha正在Subway接受采访。采访中的一轮要求她将大小为l * b的面包切成更小的相同块,以使每块都是正方形,其边长要尽可能大,并且不要剩下面包。


我觉得我的代码可以完成工作,但是我一直在出错。因为我看不到问题出在哪里,所以我希望有人帮助我指出我出了问题的地方。

我的代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

public static void main(String[] args) {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
    Scanner STDIN = new Scanner(System.in);
    int l = 0;
    int b = 0;
    int count = STDIN.nextInt();

    for(int i = 0; i<count; i++){
        l = STDIN.nextInt();
        b = STDIN.nextInt();

        if(l>b){
            check(l,b);
        }
        else if(b>l){
            check(l,b);
        }
        else{
            check(l,b);
        }
        System.out.print("\n");
    }
}

public static boolean square (int n){
    int sqrt = (int) Math.sqrt(n);
    if(sqrt*sqrt == n){
        return true;
    }
    else{
        return false;
    }
}
public static void check(int first, int second){
    int mult = first*second;

    if(square(first)){
    System.out.print(second);
    }
    else if(square(second)){
    System.out.print(first);
    }
    else{
    factors(mult);
    }
}
public static void factors(int n){
    //int B = 0;
    //int A = 0;

    for(int i = 1; i<=n; i++){
        if(n%i == 0){

            if(square((n/i))){
                     System.out.print((i));
                     break;
            }
        }

    }
}
}

最佳答案

找出l和b的GCD。那么件数=(l / gcd)*(b / gcd)

for(int j = 1; j         {

    if(l%j==0 && b%j==0)
        gcd = j;
     }
     printf("%d\n",(l/gcd)*(b/gcd));

08-27 23:15