1

そのため、入力がパンの L と B であり、出力が取得できる完全な正方形のスライス (残差なし) の量であると想定される、hackerRank チャレンジに取り組んでいます。

マーサはサブウェイで面接を受けています。インタビューのラウンドの 1 つで、彼女はサイズ 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 に答える