プログラマコード問題2010/12/01(プールを変更する必要がある)-Lv.2正方形
[質問]
長方形の紙があり、幅はWcm、長さはHcmです.紙には水平方向と垂直方向に平行なグリッド線があり、すべてのグリッドは1 cm x 1 cmの大きさです.1 cm(グリッドに沿って)× 1センチの正方形に切るつもりだったが、この紙を2つの対角線の頂点を結ぶ方向に切った人がいた.したがって、現在の矩形紙は、同じ大きさの2つの直角三角形に分かれています.新しい用紙が見つからないため、この用紙の横方向と縦方向は元の用紙と平行1 cmである× 1 cmに切って、使えるだけ使ってください.
横方向長さWと縦方向長さHが与えられた場合、使用可能な正方形の個数を求める解法関数を完了する.
せいげんじょうけん
W,H:1億以下の自然数
I/O例
W
H
result
8
12
80
I/O例説明
I/O例#1
幅8、奥行き12の長方形を対角線方向に切り取ると、合計16個の正方形が使用できません.元の長方形は96個の正方形を作成することができ、96~16=80を返します.
[回答] function solution(w, h) {
let heightPerWidth = h / w;
let accumulate = 0;
let removeBox = 0;
let count = 0;
while(true) {
let init = Math.floor(accumulate);
let length = Math.ceil(accumulate + heightPerWidth);
removeBox += (length - init);
accumulate += heightPerWidth;
count += 1;
if(!((accumulate * 10) % 10)) {
break;
}
}
return (w * h) - (removeBox * (w / count));
}
対角線が始点以外の小さな長方形の頂点と交差するまで.
対角線の横線の1つあたりに遭遇する矩形の数の累積と繰返し回数に基づいて.
乗じた矩形の個数を求めて、間違いのケースは多くて、通じません.function solution(w, h) {
let gcd = 1;
let num = 2;
let width = w;
let height = h;
while(Math.min(width, height) > num) {
if(!(width % num) && !(height % num)) {
gcd *= num;
width /= num;
height /= num;
}
else {
num++;
}
}
return (w * h) - (w + h - gcd);
}
おかしいと思ったので、最大公倍数を利用させてもらった答えを報告しましたが、だめでした...なんだよ.
正解で撮れなかったので、どこが間違っているのかさっぱり分からず、鬱陶しい.
Reference
この問題について(プログラマコード問題2010/12/01(プールを変更する必要がある)-Lv.2正方形), 我々は、より多くの情報をここで見つけました
https://velog.io/@hemtory/Programmers20201201
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function solution(w, h) {
let heightPerWidth = h / w;
let accumulate = 0;
let removeBox = 0;
let count = 0;
while(true) {
let init = Math.floor(accumulate);
let length = Math.ceil(accumulate + heightPerWidth);
removeBox += (length - init);
accumulate += heightPerWidth;
count += 1;
if(!((accumulate * 10) % 10)) {
break;
}
}
return (w * h) - (removeBox * (w / count));
}
対角線が始点以外の小さな長方形の頂点と交差するまで.対角線の横線の1つあたりに遭遇する矩形の数の累積と繰返し回数に基づいて.
乗じた矩形の個数を求めて、間違いのケースは多くて、通じません.
function solution(w, h) {
let gcd = 1;
let num = 2;
let width = w;
let height = h;
while(Math.min(width, height) > num) {
if(!(width % num) && !(height % num)) {
gcd *= num;
width /= num;
height /= num;
}
else {
num++;
}
}
return (w * h) - (w + h - gcd);
}
おかしいと思ったので、最大公倍数を利用させてもらった答えを報告しましたが、だめでした...なんだよ.正解で撮れなかったので、どこが間違っているのかさっぱり分からず、鬱陶しい.
Reference
この問題について(プログラマコード問題2010/12/01(プールを変更する必要がある)-Lv.2正方形), 我々は、より多くの情報をここで見つけました https://velog.io/@hemtory/Programmers20201201テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol