当我将以下代码用于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%的时间内及时获得代码,则必须将代码更改为效率更高一点。祝好运。

10-05 22:48