回答編集履歴

5

コードの修正

2021/07/23 05:45

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -16,11 +16,9 @@
16
16
 
17
17
  {
18
18
 
19
- if (k < 0) return;
20
-
21
19
  if (k == 0) len = m = i;
22
20
 
23
- else if (i < m)
21
+ else if (k > 0 && i < m)
24
22
 
25
23
  for (; j > 0; j--) gen(i+1, j, k - j*j*j);
26
24
 

4

if の順序を変更し、get の呼び出し回数を減らした

2021/07/23 05:45

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -16,13 +16,13 @@
16
16
 
17
17
  {
18
18
 
19
- if (i > m || k < 0) return;
19
+ if (k < 0) return;
20
20
 
21
+ if (k == 0) len = m = i;
22
+
21
- if (k > 0)
23
+ else if (i < m)
22
24
 
23
25
  for (; j > 0; j--) gen(i+1, j, k - j*j*j);
24
-
25
- else m = len = i;
26
26
 
27
27
  }
28
28
 

3

無駄なコードの削除

2021/07/23 05:30

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  for (; j > 0; j--) gen(i+1, j, k - j*j*j);
24
24
 
25
- else if (k == 0 && i <= m) m = len = i;
25
+ else m = len = i;
26
26
 
27
27
  }
28
28
 

2

マジックナンバーの 10 や 11 を消してみた

2021/07/21 23:21

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- int n, m, len = 11;
11
+ int n, m, len = -1;
12
12
 
13
13
 
14
14
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  for (; j > 0; j--) gen(i+1, j, k - j*j*j);
24
24
 
25
- else if (k == 0 && i < len) m = len = i;
25
+ else if (k == 0 && i <= m) m = len = i;
26
26
 
27
27
  }
28
28
 
@@ -36,8 +36,6 @@
36
36
 
37
37
  gen(0, (int)(cbrt(n) + 0.1), n);
38
38
 
39
- if (len > 10) len = -1;
40
-
41
39
  printf("%d\n", len);
42
40
 
43
41
  }

1

コードの改善

2021/07/21 22:58

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -12,17 +12,17 @@
12
12
 
13
13
 
14
14
 
15
- void gen(int i, int k, int r)
15
+ void gen(int i, int j, int k)
16
16
 
17
17
  {
18
18
 
19
- if (i > m || r < 0) return;
19
+ if (i > m || k < 0) return;
20
20
 
21
- if (r > 0)
21
+ if (k > 0)
22
22
 
23
- for (int j = k; j > 0; j--) gen(i+1, j, r - j*j*j);
23
+ for (; j > 0; j--) gen(i+1, j, k - j*j*j);
24
24
 
25
- else if (r == 0 && i < len) m = len = i;
25
+ else if (k == 0 && i < len) m = len = i;
26
26
 
27
27
  }
28
28