Java RunTime错误UVA 11877可口可乐

时间:2014-05-19 22:07:58

标签: java

我正在处理UVA 11877 Coca Cola,这是我的代码:

import java.util.Scanner;

class Main{
  private static Scanner sc;

  public static void main(String[] args) {
    int j;
    Scanner st = new Scanner(System.in);
    int cs = st.nextInt();
    int a = 0;
    int temp = 0;
    while (a < cs) {
      int i = st.nextInt();
      j = freeBottle(i);
      a++;
      free = 0;
      System.out.println(j);
    }
  }

  static int free;

  static int freeBottle(int i) {
    int temp = 0;
    while (i >= 3) {
      temp++;
      i = i - 3;
    }
    free = free + temp;
    int p = temp + i;
    if (p > 2) {
      freeBottle((temp + i));
    }
    if (p == 2) {
      free++;
    }
    return free;
  }
}

当我在UVA上提交它总是返回RuntimeError时,它也会在ideone.com上失败。但我在Eclipse中没有任何错误。有什么问题?

我在其他问题的提交中也看到了这个问题。

1 个答案:

答案 0 :(得分:3)

让我们从一些基本的健全性检查开始。当我针对示例输入运行代码时,我得到了错误的答案:

// Your code
Scanner st = new Scanner("3\n10\n81\n0");
// Your code
5
40
0

在Eclipse中运行代码时,您是否看到了正确答案(1540)?我怀疑没有 - 至少没有你发布的代码。

从它的外观来看,你期望第一行是后面的结果数,这是不正确的。问题是输入包括:

  

最多10个测试用例,每个测试用例包含一行整数n1 <= n <= 100)。输入以n = 0结尾,不应处理。

因此,作为第一遍,我建议仔细检查您是否正确读取输入,并查看样本输入的预期输出。从那里开始,尝试其他符合上述说明的输入,例如单个1(后跟0)和10个100

为了帮助您入门,这里有一个能够正确读取输入的循环(请注意您应该使用的try-with-resources的使用):

try(Scanner in = new Scanner(System.in)) {
  while(in.hasNextInt()) {
    int bottles = in.nextInt();
    if(bottles == 0) {
      break;
    }
    // process bottles
  }
}