質問編集履歴
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
|
169
|
+
上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。(具体的にはn=4059, m=10この場合の正しい答えは12^3+11^3+10^3で3、自分のコードでは5と出てしまいます。)
|
170
170
|
|
171
171
|
理由はわかっているのですが、改善方法がわかりません。
|
3
ソースコードのミスコードを削りました。
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
ソースコードを書き直しました。
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
|
-
f
|
23
|
+
if(n == 1){
|
24
24
|
|
25
|
-
|
25
|
+
k = 1;
|
26
26
|
|
27
|
-
|
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
|
-
|
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
|
-
|
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には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。
|
171
|
+
上記のコードでは例の入力1, 2には対応できているのですが、自分でほかの値で試したときに正しい値を出力しませんでした。(具体的にはn=4059, m=10この場合の正しい答えは12**3+11**3+10**3で3、自分のコードでは5と出てしまいます。)
|
172
|
+
|
173
|
+
理由はわかっているのですが、改善方法がわかりません。
|
1
ソースコードを載せさせていただきました。
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判定となってしまいました。
|