2014-10-27 52 views
-1

我在一所学校分配工作,我有以下问题:需要帮助伤点在我的Java代码

我给出了一些枝(用不同的或相似的长度),和我负责找取出形成给定长度的较长棒所需的最小棒数量。

例如, 给定6根长度为1,1,1,1,1,3的长度为5的长棒,输出为3. 注意:棒不能重复使用。

但是,如果不可能形成给定长度,则输出-1。 例如, 给定3个长度为1,2,6的棒,为了形成长度为5的较长棒,输出将是-1。

我有以下代码,它已通过所有公开测试用例。但是,我没有通过私人测试案例,我无法弄清楚我的错误。

这里是我的代码:

import java.util.*; 

class Result { 
    static int min = 100000; 

    public static int solve(int pos, int currSum, int len, int numStk) { 
     // implementation 
     for (int i=1; i<=Stick.data.length - pos; i++){ 
      if (currSum > len){ 
       continue; 
      } 

      else if (currSum < len){ 
       if (pos+i >= Stick.data.length){ 
        break; 
       } 
       else{ 
        solve(pos+i,currSum+Stick.data[pos+i], len, numStk+1); 
       } 
      } 

      else if (currSum == len){ 
       if (numStk < min){ 
        min = numStk; 
       } 
      } 
     } 

     return min; 
    } 
} 

class Stick { 
    static int[] data; 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     int sticks = sc.nextInt(); 
     data = new int[sticks]; 
     int len = sc.nextInt(); 
     for (int i=0; i<sticks; i++){ 
      data[i] = sc.nextInt(); 
     } 

     for (int i=0; i<sticks; i++){ 
      Result.solve(i,0,len,1); 
     } 

     if (Result.min == 100000){ 
      System.out.println(-1); 
     } else { 
      System.out.println(Result.min-1); 
     } 
    } 
} 
+2

请提供期望的结果,实际结果以及您为调试代码所采取的步骤。 – 2014-10-27 15:14:00

+0

什么是“私人测试用例”? – 2014-10-27 15:14:27

+0

**“但是,我没有通过私人测试......”** - 那会是什么,到底是什么? – azurefrog 2014-10-27 15:14:34

回答

0

事情我注意到你的代码:

  1. 错误:在主,

    Result.solve(i,0,len,1);

    假定棒我取(因此在参数列表中为numsticks = 1),但currSum为0。那应该不是data[i]

  2. 更好的代码质量:​​和currSum == len的检查可以在for循环之外完成,效率更高。

+0

谢谢!事实证明,这是启动currSUm的一个问题。 – 2014-10-28 01:13:20