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

質問編集履歴

4

題名の微変更、誤字の修正

2021/06/17 09:21

投稿

raiboz1115
raiboz1115

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- 競技プログラの問題を教えていただきたいです(正整数の立方数による表現)
1
+ 競技プログラミングの問題を教えていただきたいです(正整数の立方数による表現)
body CHANGED
@@ -82,5 +82,5 @@
82
82
  53 を3個以下の立方数の和として表現することはできない.
83
83
 
84
84
  自分で作成したソースコードを載せさせていただきました。
85
- 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。(具体的にはn=4059, m=10この場合の正しい答えは12**3+11**3+10**3で3、自分のコードでは5と出てしまいます。)
85
+ 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。(具体的にはn=4059, m=10この場合の正しい答えは12^3+11^3+10^3で3、自分のコードでは5と出てしまいます。)
86
86
  理由はわかっているのですが、改善方法がわかりません。

3

ソースコードのミスコードを削りました。

2021/06/17 09:21

投稿

raiboz1115
raiboz1115

スコア4

title CHANGED
File without changes
body CHANGED
@@ -13,7 +13,6 @@
13
13
  k = 1;
14
14
  }else{
15
15
  for(i = 1 ; i < n ; i++){
16
- printf("%d*%d*%d=%d\n", i, i, i, i*i*i);
17
16
  if(i*i*i > n){
18
17
  k = i-1;
19
18
  break;

2

ソースコードを書き直しました。

2021/06/17 09:18

投稿

raiboz1115
raiboz1115

スコア4

title CHANGED
File without changes
body CHANGED
@@ -6,19 +6,30 @@
6
6
  int sum = 0, min = 11;
7
7
 
8
8
  int main(void){
9
- int n, m;
9
+ int n, m, kans = 0;
10
10
  scanf("%d%d", &n, &m);
11
- int i, k, ans;
11
+ int i, k, ans = 100;
12
+ if(n == 1){
13
+ k = 1;
14
+ }else{
12
- for(i = 1 ; i < n ; i++){
15
+ for(i = 1 ; i < n ; i++){
16
+ printf("%d*%d*%d=%d\n", i, i, i, i*i*i);
13
- if(i*i*i > n){
17
+ if(i*i*i > n){
14
- k = i-1;
18
+ k = i-1;
15
- break;
19
+ break;
20
+ }
16
21
  }
17
22
  }
23
+ for(;k > 1;k--){
18
- ans = keisan(n, k);
24
+ kans = keisan(n, k);
25
+ if(kans < ans){
26
+ ans = kans;
27
+ }
28
+ sum = 0;
29
+ }
19
30
  if(ans <= m){
20
31
  printf("%d\n", ans);
21
- }else{
32
+ }else{
22
33
  printf("-1\n");
23
34
  }
24
35
  }
@@ -31,6 +42,7 @@
31
42
  return n / (p*p*p);
32
43
  }
33
44
  int keisan(int n, int k){
45
+ int q = 0;
34
46
  if(k != 1){
35
47
  sum += kosuu(n, k);
36
48
  keisan(amari(n, k), k-1);
@@ -40,6 +52,7 @@
40
52
  return sum;
41
53
  }
42
54
 
55
+
43
56
  ```競技プログラムの問題を教えていただきたいです。(C言語でお願いいたします)
44
57
  【問題原文】
45
58
  正整数 n と m が与えらえるとき,n を m 個以下の立方数(正整数の三乗)の和で表現することを考える.
@@ -70,4 +83,5 @@
70
83
  53 を3個以下の立方数の和として表現することはできない.
71
84
 
72
85
  自分で作成したソースコードを載せさせていただきました。
73
- 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。一応提出もしてみたのですがWRONG-ANSWERではなくRUN-ERROER判定なってしまいました
86
+ 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。(具体的にはn=4059, m=10こ場合の正しい答えは12**3+11**3+10**33自分のコードでは5てしまいま
87
+ 理由はわかっているのですが、改善方法がわかりません。

1

ソースコードを載せさせていただきました。

2021/06/17 09:17

投稿

raiboz1115
raiboz1115

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,46 @@
1
+ ```C言語
2
+ #include<stdio.h>
3
+ int amari(int , int);
4
+ int kosuu(int, int);
5
+ int keisan(int, int);
6
+ int sum = 0, min = 11;
7
+
8
+ int main(void){
9
+ int n, m;
10
+ scanf("%d%d", &n, &m);
11
+ int i, k, ans;
12
+ for(i = 1 ; i < n ; i++){
13
+ if(i*i*i > n){
14
+ k = i-1;
15
+ break;
16
+ }
17
+ }
18
+ ans = keisan(n, k);
19
+ if(ans <= m){
20
+ printf("%d\n", ans);
21
+ }else{
22
+ printf("-1\n");
23
+ }
24
+ }
25
+
26
+ int amari(int n, int p){
27
+ return n % (p*p*p);
28
+ }
29
+
30
+ int kosuu(int n, int p){
31
+ return n / (p*p*p);
32
+ }
33
+ int keisan(int n, int k){
34
+ if(k != 1){
35
+ sum += kosuu(n, k);
36
+ keisan(amari(n, k), k-1);
37
+ }else{
38
+ sum += n;
39
+ }
40
+ return sum;
41
+ }
42
+
1
- 競技プログラムの問題を教えていただきたいです。(C言語でお願いいたします)
43
+ ```競技プログラムの問題を教えていただきたいです。(C言語でお願いいたします)
2
44
  【問題原文】
3
45
  正整数 n と m が与えらえるとき,n を m 個以下の立方数(正整数の三乗)の和で表現することを考える.
4
46
  例えば,n = 35,m = 10 のとき,n は次のように立方数を使って表現できる
@@ -25,4 +67,7 @@
25
67
  53 3
26
68
  出力2:
27
69
  -1
28
- 53 を3個以下の立方数の和として表現することはできない.
70
+ 53 を3個以下の立方数の和として表現することはできない.
71
+
72
+ 自分で作成したソースコードを載せさせていただきました。
73
+ 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。一応提出もしてみたのですが、WRONG-ANSWERではなくRUN-ERROER判定となってしまいました。