当我将以下代码用于MakeChocolate时,它将大约50%的时间通过所有测试,并且使最后4组失败,并出现大约50%的超时错误。谁能解释为什么它有时会起作用,而另一些时候却无法起作用? (我实际上在两次试用之间没有任何改变,我只是按下“开始”按钮,有时它起作用而有时却没有。)
也许是连接错误之类的?如果有的话,你们中的一个可以在浏览器中尝试一下,看看它是否可复制吗?
public int makeChocolate(int small, int big, int goal) {
if ((goal - big*5) <= small && (goal %5) <= small) {
int counter = 0;
List<Integer> myList = new ArrayList();
while(counter - big <= 0) {
if ((goal - counter*5) >= 0) {
myList.add(goal - counter*5);
}
counter += 1;
}
return myList.get(myList.size() - 1);
}
else {
return -1;
}
}
最佳答案
不,Java或CodingBat或网络速度都没有问题。这仅表示您编写的代码“及时”完成了所有测试,如果没有及时完成了“只是失败”。为了确认我对各种代码进行了测试,发现对于某些代码,最后的四分测试失败了,因为代码根本没有那么有效。例如我使用的第一个代码(一个非常简单的代码段):-
public int makeChocolate(int small, int big, int goal) {
int ans= -1;
for(int i = 1; i <= small; i++){
if(i + (big * 5) == goal){
ans = i;
}
}return ans;
}
显然,此代码并未通过所有测试,但是由于其复杂性较低,因此能够通过最后四个测试。我使用的其他代码是:-
public int makeChocolate(int small, int big, int goal) {
int ans= -1;
for(int j = 1; j <= big; j++){
if(j * 5 < goal){
for(int i = 1; i <= small; i++){
if(i + (j * 5) == goal){
ans = i;
}}}
else if(j * 5 == goal){
ans = 0;}
else{ for(int i = 1; i <= small; i++){
if(i== goal){
ans = i;}}}}return ans;
}
该代码能够通过所有上述测试,但是无法通过codingbat要求的时限,即最后四个测试。根据我它不能及时通过的测试是值超过千的测试。如果您要在50%的时间内及时获得代码,则必须将代码更改为效率更高一点。祝好运。