teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

コードの修正

2021/07/23 05:45

投稿

kazuma-s
kazuma-s

スコア8222

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 の呼び出し回数を減らした

2021/07/23 05:45

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -7,10 +7,10 @@
7
7
 
8
8
  void gen(int i, int j, int k)
9
9
  {
10
- if (i > m || k < 0) return;
10
+ if (k < 0) return;
11
+ if (k == 0) len = m = i;
11
- if (k > 0)
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

無駄なコードの削除

2021/07/23 05:30

投稿

kazuma-s
kazuma-s

スコア8222

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 if (k == 0 && i <= m) m = len = i;
13
+ else m = len = i;
14
14
  }
15
15
 
16
16
  int main(void)

2

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

2021/07/21 23:21

投稿

kazuma-s
kazuma-s

スコア8222

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 = 11;
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 < len) m = len = 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

コードの改善

2021/07/21 22:58

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  int n, m, len = 11;
7
7
 
8
- void gen(int i, int k, int r)
8
+ void gen(int i, int j, int k)
9
9
  {
10
- if (i > m || r < 0) return;
10
+ if (i > m || k < 0) return;
11
- if (r > 0)
11
+ if (k > 0)
12
- for (int j = k; j > 0; j--) gen(i+1, j, r - j*j*j);
12
+ for (; j > 0; j--) gen(i+1, j, k - j*j*j);
13
- else if (r == 0 && i < len) m = len = i;
13
+ else if (k == 0 && i < len) m = len = i;
14
14
  }
15
15
 
16
16
  int main(void)