1

所以我正在做一个hackerRank挑战,其中输入是一块面包的L和B,输出应该是我能得到的完美正方形切片的数量(无残差)。

玛莎正在赛百味面试。其中一轮面试要求她将大小为 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;                    
            }
        }

    }
}
}
4

2 回答 2

4

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

for(int j=1; j <= l && j <= b; ++j) {

    if(l%j==0 && b%j==0)
        gcd = j;
     }
     printf("%d\n",(l/gcd)*(b/gcd));
于 2013-06-05T21:47:31.667 回答
0

下面是解决上述问题的代码:

package subway;

import java.util.Scanner;

public class MarthaProblem {
    public static void main(String[] nag){
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for(int i=0;i<t;i++){
            if(t>=1 && t<=1000){
                int l = sc.nextInt();
                int b = sc.nextInt();
                if((l>=1 && l<=1000)&&(b>=1 && b<=1000)){
                    System.out.println(calculate(l,b));
                }
            }
        }
    }
    public static int calculate(int l, int b){
        return ((l/(gcd(l,b)))*(b/(gcd(l,b))));
    }

    public static int gcd(int l,int b){
        if(b==0){
            return l;
        }else{
            return gcd(b, l%b);
        }
    }
}
于 2016-11-04T08:26:22.710 回答