回答編集履歴
3
コードの説明を追加
answer
CHANGED
@@ -46,4 +46,9 @@
|
|
46
46
|
int mindia = r*r + r*r; // ★ 追加
|
47
47
|
for (i = 1; i <= r; i++) { // ★ 100 ではなく r に変更
|
48
48
|
for (j = i + 1; j <= r; j++) { // ★ j = i + 1 に変更
|
49
|
-
```
|
49
|
+
```
|
50
|
+
**追記2**
|
51
|
+
dia は与えられた長方形の対角線(diagonal)の長さの 2乗です。
|
52
|
+
newdia は、比較対象の長方形の対角線の長さの 2乗です。
|
53
|
+
複数の newdia のうち dia より小さいものは不要なので continue でループを継続します。
|
54
|
+
mindia は、複数の newdia のうち最小のものを保持していて、より小さいものに更新します。
|
2
コードの改善
answer
CHANGED
@@ -35,4 +35,15 @@
|
|
35
35
|
return 0;
|
36
36
|
}
|
37
37
|
```
|
38
|
-
どこが分からないのかを質問してください。
|
38
|
+
どこが分からないのかを質問してください。
|
39
|
+
|
40
|
+
**追記**
|
41
|
+
150 まで全部調べるのは無駄ですから、次の r までとします。
|
42
|
+
```C
|
43
|
+
#include <math.h> // sqrt
|
44
|
+
|
45
|
+
int r = sqrt(dia) + 1; // ★ 追加
|
46
|
+
int mindia = r*r + r*r; // ★ 追加
|
47
|
+
for (i = 1; i <= r; i++) { // ★ 100 ではなく r に変更
|
48
|
+
for (j = i + 1; j <= r; j++) { // ★ j = i + 1 に変更
|
49
|
+
```
|
1
break; 追加
answer
CHANGED
@@ -21,10 +21,11 @@
|
|
21
21
|
if (dia>newdia || (dia==newdia && i<=h)) { // ★ i<=h に変更
|
22
22
|
continue;
|
23
23
|
}
|
24
|
-
if (newdia < mindia) { // else { から変更
|
24
|
+
if (newdia < mindia) { // ★ else { から変更
|
25
25
|
H = i;
|
26
26
|
W = j;
|
27
|
-
mindia = newdia; //
|
27
|
+
mindia = newdia; // ★ 追加
|
28
|
+
break;
|
28
29
|
}
|
29
30
|
}
|
30
31
|
}
|