2011-06-19 4 views
0

私はこのコードを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 valueprivate static finalと置き換えます(例:private static final int NAME = value;)。
  • MAXINTは、ちょうどInteger.MAX_VALUEです。
  • argsを使用しない場合でも、メインはpublic static void main(String[] args)と定義する必要があります。
  • 固定長配列は使用できません。それらを割り当てる必要があります。たとえば、int[] arr = new int[NCUTS+2]です。 2D配列はありません。「配列の配列」のみです(外部配列を割り当て、各内部配列に別の配列を割り当てる必要があります)。または、独自の長方形配列を手動で記述します。
  • cinの代わりにSystem.inを使用してください。これはInputStreamです。
  • coutの代わりにSystem.outを使用してください。これは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] + "."); 
     } 
    } 
} 
関連する問題