質問編集履歴

4

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

2021/06/17 09:21

投稿

raiboz1115
raiboz1115

スコア4

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

3

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

2021/06/17 09:21

投稿

raiboz1115
raiboz1115

スコア4

test CHANGED
File without changes
test CHANGED
@@ -27,8 +27,6 @@
27
27
  }else{
28
28
 
29
29
  for(i = 1 ; i < n ; i++){
30
-
31
- printf("%d*%d*%d=%d\n", i, i, i, i*i*i);
32
30
 
33
31
  if(i*i*i > n){
34
32
 

2

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

2021/06/17 09:18

投稿

raiboz1115
raiboz1115

スコア4

test CHANGED
File without changes
test CHANGED
@@ -14,31 +14,53 @@
14
14
 
15
15
  int main(void){
16
16
 
17
- int n, m;
17
+ int n, m, kans = 0;
18
18
 
19
19
  scanf("%d%d", &n, &m);
20
20
 
21
- int i, k, ans;
21
+ int i, k, ans = 100;
22
22
 
23
- for(i = 1 ; i < n ; i++){
23
+ if(n == 1){
24
24
 
25
- if(i*i*i > n){
25
+ k = 1;
26
26
 
27
- k = i-1;
27
+ }else{
28
28
 
29
+ for(i = 1 ; i < n ; i++){
30
+
31
+ printf("%d*%d*%d=%d\n", i, i, i, i*i*i);
32
+
33
+ if(i*i*i > n){
34
+
35
+ k = i-1;
36
+
29
- break;
37
+ break;
38
+
39
+ }
30
40
 
31
41
  }
32
42
 
33
43
  }
34
44
 
45
+ for(;k > 1;k--){
46
+
35
- ans = keisan(n, k);
47
+ kans = keisan(n, k);
48
+
49
+ if(kans < ans){
50
+
51
+ ans = kans;
52
+
53
+ }
54
+
55
+ sum = 0;
56
+
57
+ }
36
58
 
37
59
  if(ans <= m){
38
60
 
39
61
  printf("%d\n", ans);
40
62
 
41
- }else{
63
+ }else{
42
64
 
43
65
  printf("-1\n");
44
66
 
@@ -64,6 +86,8 @@
64
86
 
65
87
  int keisan(int n, int k){
66
88
 
89
+ int q = 0;
90
+
67
91
  if(k != 1){
68
92
 
69
93
  sum += kosuu(n, k);
@@ -79,6 +103,8 @@
79
103
  return sum;
80
104
 
81
105
  }
106
+
107
+
82
108
 
83
109
 
84
110
 
@@ -142,4 +168,6 @@
142
168
 
143
169
  自分で作成したソースコードを載せさせていただきました。
144
170
 
145
- 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。一応提出もてみたのすがWRONG-ANSWERではなくRUN-ERROER判定なってしまいました
171
+ 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。(具体的にはn=4059, m=10この場合の正い答えは12**3+11**3+10**33自分のコードでは5てしまいま
172
+
173
+ 理由はわかっているのですが、改善方法がわかりません。

1

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

2021/06/17 09:17

投稿

raiboz1115
raiboz1115

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,88 @@
1
+ ```C言語
2
+
3
+ #include<stdio.h>
4
+
5
+ int amari(int , int);
6
+
7
+ int kosuu(int, int);
8
+
9
+ int keisan(int, int);
10
+
11
+ int sum = 0, min = 11;
12
+
13
+
14
+
15
+ int main(void){
16
+
17
+ int n, m;
18
+
19
+ scanf("%d%d", &n, &m);
20
+
21
+ int i, k, ans;
22
+
23
+ for(i = 1 ; i < n ; i++){
24
+
25
+ if(i*i*i > n){
26
+
27
+ k = i-1;
28
+
29
+ break;
30
+
31
+ }
32
+
33
+ }
34
+
35
+ ans = keisan(n, k);
36
+
37
+ if(ans <= m){
38
+
39
+ printf("%d\n", ans);
40
+
41
+ }else{
42
+
43
+ printf("-1\n");
44
+
45
+ }
46
+
47
+ }
48
+
49
+
50
+
51
+ int amari(int n, int p){
52
+
53
+ return n % (p*p*p);
54
+
55
+ }
56
+
57
+
58
+
59
+ int kosuu(int n, int p){
60
+
61
+ return n / (p*p*p);
62
+
63
+ }
64
+
65
+ int keisan(int n, int k){
66
+
67
+ if(k != 1){
68
+
69
+ sum += kosuu(n, k);
70
+
71
+ keisan(amari(n, k), k-1);
72
+
73
+ }else{
74
+
75
+ sum += n;
76
+
77
+ }
78
+
79
+ return sum;
80
+
81
+ }
82
+
83
+
84
+
1
- 競技プログラムの問題を教えていただきたいです。(C言語でお願いいたします)
85
+ ```競技プログラムの問題を教えていただきたいです。(C言語でお願いいたします)
2
86
 
3
87
  【問題原文】
4
88
 
@@ -53,3 +137,9 @@
53
137
  -1
54
138
 
55
139
  53 を3個以下の立方数の和として表現することはできない.
140
+
141
+
142
+
143
+ 自分で作成したソースコードを載せさせていただきました。
144
+
145
+ 上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。一応提出もしてみたのですが、WRONG-ANSWERではなくRUN-ERROER判定となってしまいました。