プログラマ正方形(level 2)


私の解答(解答時間:18分)
function solution(w, h) {
    var answer = 1;
    let md = 0;
    for (let i = 1; i <= Math.min(w,h); i++) {
        if (w%i===0 && h%i===0) {
            md = i;
        }
    }
    return w*h - (w+h-md);
}
コードを書くのは難しくありませんが、この方法を考えるのに多くの時間がかかりました.

まず双方の最大承諾数を求める.そして両側を最大公約数に分けます.問題の例から見ると,2つの変数は8,12であり,2つの数の最大承諾数は4であるため,4を2,3で割った.2と3を辺とする矩形を最小単位として、ここで生じた書けない矩形を求め、最大公倍数を乗じて総矩形数から減算する.
最小単位矩形では使用できない矩形を求めるために、以下の規則が見つかった.
まず、横方向の長さがより大きなエッジであると仮定します.たとえば、横5と言うと、縦の長さによって書けない矩形の数が変わることに気づきます.まず、1×5の矩形であれば、5個は使えません.2 x 5の場合、5+1は使用できません.このように縦の長さが長くなると、使えない矩形の個数が1増加します.なぜ1を増やしたのかと聞かれたら、上の写真を見てください.縦の長さを増やすごとに、1列につき2つの列を使用できないように1つ増やします.
使用できない矩形の総数は(w/md+h/md-1)*mdである.従ってw+h-mdで表すことができる.
他人の解答
もう一人のペーストは傾いていて、wは1を増やして、Math.ceil(チルト*w)で緩みました.この方法はずっと速くて、コードの理解もいいです.私のコードは説明なしに書いてあるので、すぐに理解するのは難しいです.私はずっとこの部分を修復しようと努力していましたが、成功できず、とても悲しんでいました.ううう