Programmers-通常の長方形(Java)21.06.07.月

5695 ワード

プログラマ-完全な長方形

質問する


問題の説明
長方形の紙があり、幅はWcm、長さはHcmです.紙には水平方向と垂直方向に平行なグリッド線があり、すべてのグリッドは1 cm x 1 cmの大きさです.1 cm(グリッドに沿って)× 1センチの正方形に切るつもりだったが、この紙を2つの対角線の頂点を結ぶ方向に切った人がいた.したがって、現在の矩形紙は、同じ大きさの2つの直角三角形に分かれています.新しい用紙が見つからないため、この用紙の横方向と縦方向は元の用紙と平行1 cmである× 1 cmに切って、使えるだけ使ってください.
横方向長さWと縦方向長さHが与えられた場合、使用可能な正方形の個数を求める解法関数を完了する.
せいげんじょうけん
  • ワット、H:1億以下の自然水
  • I/O例


    に答える


    誤った方法
  • 全体の大きさから短い*2を減算すればよい.
    非常に単純な考え.後で、例にルールがあることがわかりました.
  • 正しい方法

    上の図に示すように、ルールは指定された領域内で発生します.これらのルールを使用して結果を出す場合は、最大承諾数を使用して計算する必要があります.
    区間に現れるルールを見つけたら

    (横)/(最大公約数)+(縦)/(最大公約数)-1


    はい.これをもとにして解答する
  • の整数を求めます.(w * h)
  • の最大承諾数を求めます.
  • 規則を使用して、使用できない長方形を検索します.
  • ルールで見つかった結果に最大承諾数を乗算します.
    これは、ルールがルールの結果を生成し、最大承諾数に最終的な許容できない矩形数を乗算するためです.
  • コード#コード#
    import java.util.*;
    
    class Solution {
        public long solution(int w, int h) {
            long answer = 1;
            long total = (long)w * (long)h;
            long max, min;
            
            if(w > h){
                max = (long) w;
                min = (long) h;
            }
            else{
                max = (long) h;
                min = (long) w;
            }
            
            long value = 1;
            while(min > 0){
                value = max % min;
                max = min;
                min = value;
            }
            
            answer = total - (((long)w/max + (long)h/max - 1) * max);
            
            return answer;
        }
    }```