回答編集履歴
5
コードの修正
answer
CHANGED
@@ -7,9 +7,8 @@
|
|
7
7
|
|
8
8
|
void gen(int i, int j, int k)
|
9
9
|
{
|
10
|
-
if (k < 0) return;
|
11
10
|
if (k == 0) len = m = i;
|
12
|
-
else if (i < m)
|
11
|
+
else if (k > 0 && i < m)
|
13
12
|
for (; j > 0; j--) gen(i+1, j, k - j*j*j);
|
14
13
|
}
|
15
14
|
|
4
if の順序を変更し、get の呼び出し回数を減らした
answer
CHANGED
@@ -7,10 +7,10 @@
|
|
7
7
|
|
8
8
|
void gen(int i, int j, int k)
|
9
9
|
{
|
10
|
-
if (
|
10
|
+
if (k < 0) return;
|
11
|
+
if (k == 0) len = m = i;
|
11
|
-
if (
|
12
|
+
else if (i < m)
|
12
13
|
for (; j > 0; j--) gen(i+1, j, k - j*j*j);
|
13
|
-
else m = len = i;
|
14
14
|
}
|
15
15
|
|
16
16
|
int main(void)
|
3
無駄なコードの削除
answer
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
if (i > m || k < 0) return;
|
11
11
|
if (k > 0)
|
12
12
|
for (; j > 0; j--) gen(i+1, j, k - j*j*j);
|
13
|
-
else
|
13
|
+
else m = len = i;
|
14
14
|
}
|
15
15
|
|
16
16
|
int main(void)
|
2
マジックナンバーの 10 や 11 を消してみた
answer
CHANGED
@@ -3,21 +3,20 @@
|
|
3
3
|
#include <stdio.h> // scanf, printf
|
4
4
|
#include <math.h> // cbrt
|
5
5
|
|
6
|
-
int n, m, len =
|
6
|
+
int n, m, len = -1;
|
7
7
|
|
8
8
|
void gen(int i, int j, int k)
|
9
9
|
{
|
10
10
|
if (i > m || k < 0) return;
|
11
11
|
if (k > 0)
|
12
12
|
for (; j > 0; j--) gen(i+1, j, k - j*j*j);
|
13
|
-
else if (k == 0 && i <
|
13
|
+
else if (k == 0 && i <= m) m = len = i;
|
14
14
|
}
|
15
15
|
|
16
16
|
int main(void)
|
17
17
|
{
|
18
18
|
scanf("%d%d", &n, &m);
|
19
19
|
gen(0, (int)(cbrt(n) + 0.1), n);
|
20
|
-
if (len > 10) len = -1;
|
21
20
|
printf("%d\n", len);
|
22
21
|
}
|
23
22
|
```
|
1
コードの改善
answer
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
int n, m, len = 11;
|
7
7
|
|
8
|
-
void gen(int i, int
|
8
|
+
void gen(int i, int j, int k)
|
9
9
|
{
|
10
|
-
if (i > m ||
|
10
|
+
if (i > m || k < 0) return;
|
11
|
-
if (
|
11
|
+
if (k > 0)
|
12
|
-
for (
|
12
|
+
for (; j > 0; j--) gen(i+1, j, k - j*j*j);
|
13
|
-
else if (
|
13
|
+
else if (k == 0 && i < len) m = len = i;
|
14
14
|
}
|
15
15
|
|
16
16
|
int main(void)
|