2011-06-19 38 views
0

我不習慣在java中的代碼,所以我需要幫助,以功能的方式將此代碼從C++轉換爲java。我自己嘗試過,但結果總是0.它是切割棒問題。幫助翻譯切割棒問題的C++代碼爲java

#include <iostream> 

#define MAXINT 2147483647 
#define NCUTS 50 
using namespace std; 


int main() { 

    int len; 
    int nc; 
    int arr[NCUTS+2]; 
    int dp[NCUTS+2][NCUTS+2]; 

    while((cin >> len) && (len != 0)) { 
     cin >> nc; 

     for(int i=0; i<nc; i++) { 
      cin >> arr[i+1]; 
     } 

     arr[0] = 0; 
     nc++; 
     arr[nc] = len; 

     for(int i=0; i<=NCUTS+1; i++) { 
      for(int j=0;j<=NCUTS+1;j++) { 
       dp[i][j] = MAXINT; 
      } 
     } 

     for(int i=0; i<=nc; i++) { 
      dp[i][i] = 0; 
      dp[i][i+1] = 0; 
      dp[i][i+2] = arr[i+2] - arr[i]; 
     } 

     for(int k=3; k<=nc; k++) { 
      for(int i=0; i<=nc-k; i++) { 
       for(int j=i+1; j<=i+k-1; j++) { 
        if((dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i]) < dp[i][i+k]) { 
         dp[i][i+k] = dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i]; 
        } 
       } 
      } 
     } 
     cout << "The minimum cutting is "<< dp[0][nc] << "." << endl; 
    } 
} 
+4

將您的Java代碼 –

回答

2

我不會發布完整的翻譯,但C++和Java之間的一些具體的差異,這將是與此有關:

  • 你需要在一個類來包裝的一切,如public class CuttingSticks
  • #define NAME value替換爲private static final,例如,private static final int NAME = value;
  • MAXINT只是Integer.MAX_VALUE
  • 主要必須定義爲public static void main(String[] args),即使您不使用args
  • 您不能使用固定大小的數組。你必須分配它們。例如,int[] arr = new int[NCUTS+2]。沒有2D數組,只有「數組數組」(您需要分配外部數組,然後爲每個內部數組分配另一個數組)。或者,手動編寫您自己的矩形陣列。
  • 而不是cin,請使用System.in。這是一個InputStream。使用System.out代替cout。這是一個PrintStream - 通常您只會使用System.out.println
1
import java.io.*; 
import java.util.*; 

class MyClass { 

    static final int MAXINT = Integer.MAX_VALUE; 
    static final int NCUTS = 50; 

    public static void main (String [] args) throws IOException { 
     int len; 
     int nc; 
     int[] arr = new int[NCUTS+2]; 
     int[][] dp = new int[NCUTS+2][NCUTS+2]; 

     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     while((len = Integer.parseInt(in.readLine())) != 0) { 
      nc = Integer.parseInt(in.readLine()); 

      for(int i=0; i<nc; i++) { 
       arr[i+1] = Integer.parseInt(in.readLine()); 
      } 

      arr[0] = 0; 
      nc++; 
      arr[nc] = len; 

      for(int i=0; i<=NCUTS+1; i++) { 
       for(int j=0;j<=NCUTS+1;j++) { 
        dp[i][j] = MAXINT; 
       } 
      } 

      for(int i=0; i<=nc; i++) { 
       dp[i][i] = 0; 
       dp[i][i+1] = 0; 
       dp[i][i+2] = arr[i+2] - arr[i]; 
      } 

      for(int k=3; k<=nc; k++) { 
       for(int i=0; i<=nc-k; i++) { 
        for(int j=i+1; j<=i+k-1; j++) { 
         if((dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i]) < dp[i][i+k]) { 
          dp[i][i+k] = dp[i][j] + dp[j][i+k] + arr[i+k] - arr[i]; 
         } 
        } 
       } 
      } 
      System.out.println("The minimum cutting is " + dp[0][nc] + "."); 
     } 
    } 
}