在切割棒问题中帮助将c ++代码翻译成java

时间:2011-06-19 23:17:08

标签: java c++

我不习惯在java中编码所以我需要帮助将这段代码从功能方式转换为从c ++到java。我自己尝试过,但结果总是为0.这是剪切棒问题。

#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;
    }
}

2 个答案:

答案 0 :(得分:2)

我不会发布完整的翻译,但是C ++和Java之间的一些具体差异将与此相关:

  • 您需要将所有内容都包装在一个类中,例如public class CuttingSticks
  • #define NAME value替换为private static final,例如private static final int NAME = value;
  • MAXINT只是Integer.MAX_VALUE
  • main必须定义为public static void main(String[] args),即使您不使用args
  • 您不能使用固定大小的数组。你必须分配它们。例如,int[] arr = new int[NCUTS+2]。没有2D数组,只有“数组数组”(您需要分配外部数组,然后为每个内部数组分配另一个数组)。或者,手动编写自己的矩形阵列。
  • 使用cin而不是System.in。这是InputStream
  • 使用cout而不是System.out。这是PrintStream - 通常您只需使用System.out.println

答案 1 :(得分: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] + ".");
        }
    }
}